Java Junit测试失败,如何修复?
因此,我正在测试使用Junit,这对它来说是非常新的。 我尝试在一个名为SetOfUsers的类中测试方法,如下所示:Java Junit测试失败,如何修复?,java,unit-testing,junit,Java,Unit Testing,Junit,因此,我正在测试使用Junit,这对它来说是非常新的。 我尝试在一个名为SetOfUsers的类中测试方法,如下所示: @Test public void testFindUserByName() { System.out.println("findUserByName"); String name = ""; SetOfUsers instance = new SetOfUsers(); User expResult =
@Test
public void testFindUserByName() {
System.out.println("findUserByName");
String name = "";
SetOfUsers instance = new SetOfUsers();
User expResult = null;
User result = instance.findUserByName(name);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
}
所以我想检查在Bob中输入的用户名,例如在名称字符串中,如下所示
String name = "Bob";
因为我在setOfUsers类中有一个名为Bob的用户。输出窗口显示此消息
Failed: expected:<null> but was:<Staff name:Bob, Staff pass:abc123>
失败:应为:但为:
我该怎么做才能通过此测试?您不能使用
assertEquals()
要测试空值,请使用:
assertNull(result);
这个测试总是会失败,因为最后一行是
fail("The test case is a prototype.");
你现在考试不及格的原因是因为上面的那条线
assertEquals(expResult, result);
您正在将预期结果设置为null,并且从名称“”
”获得的结果可能也是该错误消息中的空字符串。您需要让expResult与instance.findUserByName(“Bob”)返回的结果相同。但是,除非您使用用户对象初始化要设置的实例,否则对象将不匹配,因此最好模拟它以返回预先创建的User
对象,使其匹配,或者创建一个User
对象,该对象的属性与您希望返回的对象相同,请检查返回的User
对象的字段和您创建的User
对象的字段,确保它们匹配
如果要检查用户的Bob
是什么,请将代码更改为:
@Test
public void testFindUserByName() {
System.out.println("findUserByName");
String name = "Bob";
SetOfUsers instance = new SetOfUsers();
User expResult = <Create an object you expect instance.findUserByName("Bob") to return>;
User result = instance.findUserByName(name);
//Check fields here.
assertEquals(expResult.getUserName(), result,getUserName());
// TODO review the generated test code and remove the default call to fail.
}
@测试
public void testFindUserByName(){
System.out.println(“findUserByName”);
String name=“Bob”;
SetOfUsers实例=新的SetOfUsers();
用户expResult=;
用户结果=instance.findUserByName(名称);
//检查这里的字段。
assertEquals(expResult.getUserName(),result,getUserName());
//TODO检查生成的测试代码并删除默认的失败调用。
}
我不明白这个问题,但是如果你想搜索“Bob”,为什么要初始化name=“”?测试应为:
@Test
public void testFindUserByName() {
//Create SetOfUsers
//Add new User with name Bob
//FindByUsername("Bob")
//AssertEqual(User.getName(), "Bob")
}
阅读,这是一种非常好的技术,可以使测试易于编写和理解(阅读)
测试驱动开发是一种软件开发方法,它本质上规定,对于每个软件单元,软件开发人员必须:
- 首先定义单元的测试集李>
- 然后实施该单元李>
- 最后验证该单元的实现使测试成功
@Test
public void testFindUserByName() {
// given
SetOfUsers instance = new SetOfUsers();
// when
User result = instance.findUserByName("Bob");
// then
assertEquals("Bob", result.getName());
}