如何测试Java getter方法

如何测试Java getter方法,java,junit,setter,getter,Java,Junit,Setter,Getter,我有一个类将有这些方法。将来会有一种设置电子邮件和密码变量的方法。但这些变量永远无法从类外进行设置。如何测试这些方法 public class Auth { private String email; private String password; public String getEmail(){ return this.email; } public String getPassword(){ return thi

我有一个类将有这些方法。将来会有一种设置电子邮件和密码变量的方法。但这些变量永远无法从类外进行设置。如何测试这些方法

public class Auth {
    private String email;
    private String password;

    public String getEmail(){
        return this.email;
    }

    public String getPassword(){
        return this.password;
    }
}

理想情况下,无论是否在
Auth
类中设置密码,都需要使用
setup()
overrided方法设置JUnit

接下来需要做的是从数据库/whereverStored获取实际密码的值,并将其与
getPassword()
值进行比较

对于测试,您可以调用:

Auth authObj = ...; //your Auth object where password is set
assertTrue(dbPassword.equals(authObj.getPassword()), true);

理想情况下,无论是否在
Auth
类中设置密码,都需要使用
setup()
overrided方法设置JUnit

接下来需要做的是从数据库/whereverStored获取实际密码的值,并将其与
getPassword()
值进行比较

对于测试,您可以调用:

Auth authObj = ...; //your Auth object where password is set
assertTrue(dbPassword.equals(authObj.getPassword()), true);

不要测试getter,而是测试一些合理的单元/用例。一定有什么东西在创造这些对象,它是这个单元的一部分

例如:

@Test
public void shouldCreateAuthFromColonSeparated() {
    Auth auth = authFactory.create("johnny@example.com:secret");
    assertThat(auth.getEmail(), is("johnny@example.com"));
    assertThat(auth.getPassword(), is("secret"));
}

不要测试getter,而是测试一些合理的单元/用例。一定有什么东西在创造这些对象,它是这个单元的一部分

例如:

@Test
public void shouldCreateAuthFromColonSeparated() {
    Auth auth = authFactory.create("johnny@example.com:secret");
    assertThat(auth.getEmail(), is("johnny@example.com"));
    assertThat(auth.getPassword(), is("secret"));
}

测试getter和setter没有显著的好处,甚至可能是有害的。原因是纯getter和setter不提供可测试的业务功能。相反,它们是面向对象设计原则(信息隐藏)的一部分。

测试getter和setter没有显著的好处,甚至可能有害。原因是纯getter和setter不提供可测试的业务功能。相反,它们是面向对象设计原则(信息隐藏)的一部分。

必须将这些字段设置为值,否则它们完全无用,应该删除。您是否在问如何实现TDD并对未完成的组件进行测试?通常我不会将
get
描述为一个工作单元。首先,
设置
,然后
获取
——这是一个最小的UOW。我可能不会测试它,因为我认为可以安全地说
A=A
。设置字段的唯一方法是通过反射。因此,如果你真的想测试这些伪getter(我不会),可以使用反射来设置字段。有些东西必须将这些字段设置为值,否则它们完全没有用处,应该被删除。您是否在问如何实现TDD并对未完成的组件进行测试?通常我不会将
get
描述为一个工作单元。首先,
设置
,然后
获取
——这是一个最小的UOW。我可能不会测试它,因为我认为可以安全地说
A=A
。设置字段的唯一方法是通过反射。因此,如果您真的想测试这些伪getter(我不会),可以使用反射来设置字段,但是完全覆盖需要测试它们。我知道这是胡说八道,但当公司禁止忽略包时……完全覆盖并不一定意味着每个方法都由测试显式调用。当然。但是如果管道需要,配置不在您手中,如果更改代码是唯一的方法。。。另一件事是,如果一个字段的类型发生了变化,并且您使用了像
@Data
这样的注释,那么您不必更改getter/setter;但是,可能需要更改代码;在这种情况下,测试可以检测到变化,但是全面覆盖需要测试它们。我知道这是胡说八道,但当公司禁止忽略包时……完全覆盖并不一定意味着每个方法都由测试显式调用。当然。但是如果管道需要,配置不在您手中,如果更改代码是唯一的方法。。。另一件事是,如果一个字段的类型发生了变化,并且您使用了像
@Data
这样的注释,那么您不必更改getter/setter;但是,可能需要更改代码;在这种情况下,测试可以检测到变化。