Java JUnit和检查字段是否为null

Java JUnit和检查字段是否为null,java,junit,constructor,default-constructor,Java,Junit,Constructor,Default Constructor,当我测试默认cons时。在这样的课堂上: public class Man { public Man(){} @Test public void defConstructorTest() { Man m = new Man(); assertEquals(0, m.getName()); assertEquals(0, m.getBorn()); @Test public void defConstructorTest() { Man m = new

当我测试默认cons时。在这样的课堂上:

public class Man {
    public Man(){}

@Test
public void defConstructorTest() {
    Man m = new Man();
    assertEquals(0, m.getName());
    assertEquals(0, m.getBorn());
@Test
public void defConstructorTest() {
    Man m = new Man();
    assertEquals(null, m.getName());
    assertEquals(null, m.getBorn());
消息传来:

测试失败预期为0,但为null

当我像这样更改代码时:

public class Man {
    public Man(){}

@Test
public void defConstructorTest() {
    Man m = new Man();
    assertEquals(0, m.getName());
    assertEquals(0, m.getBorn());
@Test
public void defConstructorTest() {
    Man m = new Man();
    assertEquals(null, m.getName());
    assertEquals(null, m.getBorn());
测试再次失败,显示以下消息:

应为空,但为:0


有人能解释为什么我会犯这个错误吗?(getter工作正常)

当您想要断言空值时,应该使用

assertNull()

另外,您将“new Man()”分配给“m”变量,但在断言中使用了“e”变量。

您没有共享足够的
Man
代码来给出明确的答案,但是从错误消息(以及一些常识)中,我猜
getName()
返回一个
字符串
getBorn()
返回该男子出生年份的
int
。假设这些只是返回数据成员的简单getter,
字符串(或任何其他对象)的默认值是
null
,除非它被显式初始化,而原语
int
的默认值是
0

长话短说,您需要为每个getter指定正确的默认值:

@Test
public void defConstructorTest() {
    Man m = new Man();
    assertNull(m.getName());
    assertEquals(0, m.getBorn());
}

请把完整的代码贴在这里好吗?e的定义在哪里?我假设
name
不是一个数字(或者不是一个原语),但是
born
是一个原语。创建一个名为空且为零的
Man
是否真的有意义。。。出身?比如:拥有一个默认构造函数有意义吗?理解测试的意义:)
assertNull
只是一个方便的方法,它可以给出一个更有意义的失败消息。不使用它并不能解释测试失败的原因。