JUnit 和检查字段是否为空
JUnit and checking fields for null
当我测试默认缺点时。在这样的 class 中:
public class Man {
public Man(){}
@Test
public void defConstructorTest() {
Man m = new Man();
assertEquals(0, m.getName());
assertEquals(0, m.getBorn());
来消息:
test failed expected: 0 but was: null
当我这样更改代码时:
@Test
public void defConstructorTest() {
Man m = new Man();
assertEquals(null, m.getName());
assertEquals(null, m.getBorn());
测试再次失败并显示此消息:
expected: null but was: 0
有人可以解释为什么我会收到此错误吗? (吸气剂工作正常)
当你想断言空值时,你应该使用
assertNull()
此外,您将 "new Man()" 分配给 "m" 变量,但在断言中您使用 "e" 变量。
您没有分享足够的 Man
代码来给出明确的答案,但根据错误消息(和一些常识)我猜 getName()
return一个 String
和 getBorn()
return 一个 int
这个人的出生年份。假设这些只是 return 数据成员的简单 getter,String
(或任何其他对象,就此而言)的默认值是 null
,除非它被显式初始化,原语 int
的默认值是 0
.
长话短说,您需要为每个 getter:
期望正确的默认值
@Test
public void defConstructorTest() {
Man m = new Man();
assertNull(m.getName());
assertEquals(0, m.getBorn());
}
当我测试默认缺点时。在这样的 class 中:
public class Man {
public Man(){}
@Test
public void defConstructorTest() {
Man m = new Man();
assertEquals(0, m.getName());
assertEquals(0, m.getBorn());
来消息:
test failed expected: 0 but was: null
当我这样更改代码时:
@Test
public void defConstructorTest() {
Man m = new Man();
assertEquals(null, m.getName());
assertEquals(null, m.getBorn());
测试再次失败并显示此消息:
expected: null but was: 0
有人可以解释为什么我会收到此错误吗? (吸气剂工作正常)
当你想断言空值时,你应该使用
assertNull()
此外,您将 "new Man()" 分配给 "m" 变量,但在断言中您使用 "e" 变量。
您没有分享足够的 Man
代码来给出明确的答案,但根据错误消息(和一些常识)我猜 getName()
return一个 String
和 getBorn()
return 一个 int
这个人的出生年份。假设这些只是 return 数据成员的简单 getter,String
(或任何其他对象,就此而言)的默认值是 null
,除非它被显式初始化,原语 int
的默认值是 0
.
长话短说,您需要为每个 getter:
期望正确的默认值@Test
public void defConstructorTest() {
Man m = new Man();
assertNull(m.getName());
assertEquals(0, m.getBorn());
}