如何使用 JUnit 仅使用 public getter 和私有 setter 测试 class?
How to test a class only with public getters and private setters with JUnit?
假设我们有以下 class:
package com.porphyrie.examples;
public class TestExample {
private String name;
private int id;
public TestExample() {
setName("testExample");
setId(3);
}
public String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
private void setId(int id) {
this.id = id;
}
}
我应该如何测试这个 class?由于 Eclipse 只想测试 public 方法,我应该如何在不设置 setter 的情况下测试吸气剂?将上面class中的private
setter-方法设置为public
仅用于测试目的是否有效?
感谢您的帮助...
您不应将 setter 设为私有,因为 setter 的目的是让程序员实现 class 以将他们想要的值设置到 class 的字段中。由于字段已经是私有的,因此拥有私有设置器有点多余。如果您不知道要更改哪些字段,则将这些字段保留为私有并且不要为这些字段创建设置器。
So yes is the answer to your question.
如果您有理由不创建设置器 public,那么您可以使用参数化构造函数,它在创建此 class 的对象时使用作为参数传递的值来启动字段,并且实例化对象时调用参数化构造函数
您的示例代码是一个很好的代码示例,它不是为实现简单的单元测试而编写的。如果您采用的心态是您必须 design/structure/write 以一种更容易测试的方式编写代码,那么您就不应该有这些问题。简短的回答,是的,将设置器公开为 public 以启用您的测试,或者如果您不想要 public api.[=10 的设置器部分,则将设置器公开为 package/default 范围=]
或者,您可以添加另一个带有参数的构造函数,以便在您创建实例时为您设置值。
不可以,您的私有方法无法从您的单元测试用例中调用。所以要么你必须让它成为 public 或者默认或保护(如果你把它放在同一个包里)。您通常不测试私有方法,因为它们只能(通常)通过另一个 public 方法间接测试。当您试驾并制作私有方法时,它们通常是 "extract method" 重构的结果,并且已经间接测试过。
假设我们有以下 class:
package com.porphyrie.examples;
public class TestExample {
private String name;
private int id;
public TestExample() {
setName("testExample");
setId(3);
}
public String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
private void setId(int id) {
this.id = id;
}
}
我应该如何测试这个 class?由于 Eclipse 只想测试 public 方法,我应该如何在不设置 setter 的情况下测试吸气剂?将上面class中的private
setter-方法设置为public
仅用于测试目的是否有效?
感谢您的帮助...
您不应将 setter 设为私有,因为 setter 的目的是让程序员实现 class 以将他们想要的值设置到 class 的字段中。由于字段已经是私有的,因此拥有私有设置器有点多余。如果您不知道要更改哪些字段,则将这些字段保留为私有并且不要为这些字段创建设置器。
So yes is the answer to your question.
如果您有理由不创建设置器 public,那么您可以使用参数化构造函数,它在创建此 class 的对象时使用作为参数传递的值来启动字段,并且实例化对象时调用参数化构造函数
您的示例代码是一个很好的代码示例,它不是为实现简单的单元测试而编写的。如果您采用的心态是您必须 design/structure/write 以一种更容易测试的方式编写代码,那么您就不应该有这些问题。简短的回答,是的,将设置器公开为 public 以启用您的测试,或者如果您不想要 public api.[=10 的设置器部分,则将设置器公开为 package/default 范围=]
或者,您可以添加另一个带有参数的构造函数,以便在您创建实例时为您设置值。
不可以,您的私有方法无法从您的单元测试用例中调用。所以要么你必须让它成为 public 或者默认或保护(如果你把它放在同一个包里)。您通常不测试私有方法,因为它们只能(通常)通过另一个 public 方法间接测试。当您试驾并制作私有方法时,它们通常是 "extract method" 重构的结果,并且已经间接测试过。