Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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 如何为构造函数创建测试?_Java_Testing - Fatal编程技术网

Java 如何为构造函数创建测试?

Java 如何为构造函数创建测试?,java,testing,Java,Testing,我正在为一个已经完成的程序创建测试,但是我在获得100%的覆盖率方面遇到了困难 类的构造函数是: public Contact(String name, String email){ if (name == null){ throw new IllegalAgrugmentException("name must not be null"); } } 我创建的测试如下: public void testForContactConst

我正在为一个已经完成的程序创建测试,但是我在获得100%的覆盖率方面遇到了困难

类的构造函数是:

public Contact(String name, String email){
     if (name == null){
           throw new IllegalAgrugmentException("name must not be null");
     }
}
我创建的测试如下:

public void testForContactConstructor(){
        Contact testContact = new Contact(null, null);
        assertThrows(IllegalArgumentException.class, () -> {
            testContact.getName();
        });
    }

eclispe中没有包含该测试。我该如何解决这个问题?

您的断言似乎应该是这样的

assertThrows(IllegalArgumentException.class,()->{
联系人=新联系人(空,空);
});
否则,它将在到达断言之前抛出:(

除此之外,我需要更多的信息,您使用的是什么测试框架?可能缺少注释

总之,您可以这样做(取决于构造函数的复杂程度):

public void TestContactConstructorFail(){
assertThrows(IllegalArgumentException.class,()->
新联系人(空,空));
}
public void TestContactsConstructorSuccess()测试联系人{
联系人c=新联系人(姓名、电子邮件);
assertNotNull(c);//将其余部分留给get/set测试
}
(还添加任何特定于框架的注释,例如Junit的
@Test


如果您的构造函数中有复杂的验证或其他内容,我建议将这些方法委托给私有(ish)方法,并分别测试它们。

我在eclipse程序中使用java。通过编辑,我得到了要覆盖的assertThrows,但不包括Contact testContact=new Contact(null,null)这一定是因为lambda在完成之前抛出。通常,您应该只关心实际代码(非测试代码)的数量因此,如果我们有一行测试代码没有注册为已运行,则可能会有冗余,但除此之外,这并不是什么大问题。如果您希望涵盖字段初始化等(使用实际值而不是null),也可以添加构造函数的肯定测试:)您需要创建两个不同的测试用例,一个name=null,另一个name=“someValidName”