繁体   English   中英

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

[英]Junit failed tests, how to fix this?

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

我该怎么做才能成为通行证?

阅读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());

}

很高兴阅读:

这个测试总是会失败,因为最后一行是

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.

}

您无法使用assertEquals()测试null。
要测试null,请使用:

assertNull(result);

我不明白这个问题,但是如果你想搜索“Bob”为什么要初始化name =“”? 测试应该是:

@Test
public void testFindUserByName() {
    //Create SetOfUsers
    //Add new User with name Bob
    //FindByUsername("Bob")
    //AssertEqual(User.getName(), "Bob")
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM