Junit测试失败了,如何解决这个问题?

时间:2014-01-26 20:49:52

标签: java unit-testing junit

所以我正在尝试使用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>

我能做些什么才能成为传球?

4 个答案:

答案 0 :(得分:2)

阅读BDD,这是使测试易于编写和理解的非常好的技巧(阅读)

  

测试驱动开发是一种软件开发方法,基本上表明对于每个软件单元,软件开发人员必须:

     
      
  • 首先为单位定义测试集;
  •   
  • 然后实施该单位;
  •   
  • 最后验证单元的实现是否使测试成功。
  •   

写得好的测试应该有GivenWhenThen个部分

  

给定)一些上下文

     

何时)执行了一些操作

     

然后)应获得一组特定的可观察后果

此样式称为SpecificationByExample

  

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")
}