Java JUnit和检查字段是否为null
当我测试默认cons时。在这样的课堂上: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
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
只是一个方便的方法,它可以给出一个更有意义的失败消息。不使用它并不能解释测试失败的原因。