所以我正在尝试使用Junit,这是一个很新的东西。 我试图在一个名为SetOfUsers的类中测试方法,如下所示:
@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>
我能做些什么才能成为传球?
答案 0 :(得分:2)
阅读BDD,这是使测试易于编写和理解的非常好的技巧(阅读)
测试驱动开发是一种软件开发方法,基本上表明对于每个软件单元,软件开发人员必须:
- 首先为单位定义测试集;
- 然后实施该单位;
- 最后验证单元的实现是否使测试成功。
写得好的测试应该有GivenWhenThen个部分
(给定)一些上下文
(何时)执行了一些操作
(然后)应获得一组特定的可观察后果
Given-When-Then是一种代表测试的风格 - 或者正如其倡导者所说 - 使用SpecificationByExample指定系统的行为。
@Test
public void testFindUserByName() {
// given
SetOfUsers instance = new SetOfUsers();
// when
User result = instance.findUserByName("Bob");
// then
assertEquals("Bob", result.getName());
}
很高兴阅读:
答案 1 :(得分:1)
此测试总是会失败,因为最后一行是
fail("The test case is a prototype.");
您的测试现在失败的原因是因为上面的行,
assertEquals(expResult, result);
您正在将预期结果设置为null,而您从名称""
获得的结果可能也是一个空字符串以及该错误消息。您需要使expResult与您希望返回的instance.findUserByName(“Bob”)相同。但是,除非初始化要使用用户对象设置的实例,否则对象将不匹配,因此最好模拟它以返回预先创建的User
对象以使它们匹配,或者创建{{ 1}}具有与您希望返回的对象相同的属性的对象检查返回的User
对象的字段以及您创建的User
对象以确保它们匹配。
如果您想检查User
的用户是什么,请将代码更改为:
Bob
答案 2 :(得分:0)
您无法使用assertEquals()
测试null
要测试null,请使用:
assertNull(result);
答案 3 :(得分:0)
我不明白这个问题,但是如果你想搜索“Bob”为什么要初始化name =“”?测试应该是:
@Test
public void testFindUserByName() {
//Create SetOfUsers
//Add new User with name Bob
//FindByUsername("Bob")
//AssertEqual(User.getName(), "Bob")
}