Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit测试失败,如何修复?_Java_Unit Testing_Junit - Fatal编程技术网

Java Junit测试失败,如何修复?

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 =

因此,我正在测试使用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>
失败:应为:但为:

我该怎么做才能通过此测试?

您不能使用
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")
}
阅读,这是一种非常好的技术,可以使测试易于编写和理解(阅读)

测试驱动开发是一种软件开发方法,它本质上规定,对于每个软件单元,软件开发人员必须:

  • 首先定义单元的测试集
  • 然后实施该单元
  • 最后验证该单元的实现使测试成功
好的笔试应该有几个部分

给定了一些上下文

时)执行某些操作

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

这种风格被称为

给定When Then是一种表示测试的风格——或者正如其倡导者所说——使用SpecificationByExample指定系统的行为

示例测试 很高兴读到:


如果<代码>表达式> /COD>是空……“鲍伯”字符串是在哪里分配的?在另一个被称为SETFOUSER的类中,首先要考虑的是你想测试的具体场景?现在,您似乎正在尝试测试当有人试图在(可能是空的???)SetOfUsers()中查找用户时会发生什么,并且您希望returnvalue为null。
@Test
public void testFindUserByName() {

    // given
    SetOfUsers instance = new SetOfUsers();

    // when
    User result = instance.findUserByName("Bob");

    // then
    assertEquals("Bob", result.getName());

}