Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 DTO的单元测试_Java_Unit Testing_Dto - Fatal编程技术网

Java DTO的单元测试

Java DTO的单元测试,java,unit-testing,dto,Java,Unit Testing,Dto,测试getter和setter是否合适和必要 我认为它们没有任何逻辑,也不能崩溃或抛出任何异常。您不应该对DTO的getter和setter进行单元测试,除非它们包含一些需要测试的复杂逻辑。此函数不会更改此字符串的任何内容。。。 -->没有复杂的二传手 setTest(String test) { this.test = test; } 但是如果您有类似的东西,那么测试它是有意义的(因为可能有人更改了令牌,例如): 如果生成了getter和setter的代码,我认为它是正确的。这是在语言

测试getter和setter是否合适和必要


我认为它们没有任何逻辑,也不能崩溃或抛出任何异常。

您不应该对DTO的getter和setter进行单元测试,除非它们包含一些需要测试的复杂逻辑。

此函数不会更改此字符串的任何内容。。。 -->没有复杂的二传手

setTest(String test) {
   this.test = test;
}
但是如果您有类似的东西,那么测试它是有意义的(因为可能有人更改了令牌,例如):


如果生成了getter和setter的代码,我认为它是正确的。这是在语言级别没有属性的一个主要缺点——您有很多生成的代码,这些代码都签入到源代码管理中,并且应该进行测试,因为它在覆盖率报告中会发出红色的尖叫声

另一方面,即使是简单的getter也可能不正确,例如由于C&p错误:

private String foo;
private String bar;

String getFoo() {return foo;}
String getBar() {return foor;}

我的最后一个想法是:当测试使用getter和setter的适当逻辑时,会隐式地测试它们。测试中未包括设定器?-可能您从未设置此字段,它可能是最终字段?只有二传手但没有传接手无用字段?

出于以下几个原因,您可能需要/被迫对getter和setter进行单元测试:
1. <代码>代码覆盖范围 2. <代码>自动回归测试

在这些情况下,您可以使用生成这些junit测试用例的库,或者,使用泛型编写单个实用程序方法来设置对象,将其取回并比较它们是否相等。

我现在正在阅读,作者建议您不要为«值对象»(例如DTO)编写测试用例


为了报道本身的报道永远都不是好的,正如卡尔·塞根所说

使用现代工具不需要太多努力:

import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanConstructor;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanEquals;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanHashCode;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanToString;
import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters;
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNotNull;

public class Test {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void testFlatFileReaderMetadata_Parameters() throws Exception {

        assertNotNull(new Test());

        assertThat(Test.class, allOf(hasValidBeanConstructor(), hasValidBeanEquals(), hasValidGettersAndSetters(),
                hasValidBeanHashCode(), hasValidBeanToString()));
    }
}

静态代码分析应该能够发现未使用的字段和所有这些内容,我认为不需要进行单元测试。如果DTO使用自动转换机制,比如from
ModelMapper
,我不确定。我有一些测试失败,因为它没有正确映射所有内容。当问题存在于DTO中时,搜索一个测试的缺陷可能会很烦人。此外,您可以将
@paraperizedtest
与几个类一起使用,如
@ValueSource
,而我完全同意“为了覆盖而覆盖永远不会好”,这不是这个问题的内容。测试DTO类并不意味着不相信语言能够正确地将数据移入和移出DTO类。这是关于不信任未来的开发人员能够维护类的“DTO契约”。所谓“DTO契约”,我的意思是“每个getter应该总是返回提供给其相应setter的最新值”。“但是,嘿,拜托!没有人会在DTO中加入一些“逻辑”并打破它,是吗?”是的,他们会。
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanConstructor;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanEquals;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanHashCode;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanToString;
import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters;
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNotNull;

public class Test {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void testFlatFileReaderMetadata_Parameters() throws Exception {

        assertNotNull(new Test());

        assertThat(Test.class, allOf(hasValidBeanConstructor(), hasValidBeanEquals(), hasValidGettersAndSetters(),
                hasValidBeanHashCode(), hasValidBeanToString()));
    }
}