测试getter和setter是否合适和必要?
我认为他们没有任何逻辑,他们不会崩溃或抛出任何例外。
答案 0 :(得分:7)
你不应该对DTO的getter和setter进行单元测试,除非它们包含一些需要进行一些测试的复杂逻辑。
答案 1 :(得分:4)
我现在正在阅读GOOS,作者建议您不要为“价值对象”(例如DTO)编写测试用例。
覆盖范围本身的覆盖范围从来都不是好事。正如Karl Seguin所说的那样"Tests should be meaningful"。
答案 2 :(得分:3)
使用现代工具并不需要付出太多努力:
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()));
}
}
答案 3 :(得分:2)
如果生成了getter和setter的代码,我认为它是正确的。这是在语言级别没有属性的主要缺点 - 您有大量生成的代码已签入源代码控制并应进行测试,因为它在覆盖率报告中尖叫红色。
另一方面,即使是简单的getter也可能不正确,例如由于C& P错误:
private String foo;
private String bar;
String getFoo() {return foo;}
String getBar() {return foor;}
我最后的想法:当测试使用它们的适当逻辑时,会对隐式测试程序和setter进行隐式测试。塞特不参加测试? - 可能你永远不会设置这个领域,它可能是最终的?只有setter但没有调用getter? - 无用的领域?
答案 4 :(得分:0)
此函数不会更改此字符串的任何内容... - >没有复杂的二传手
setTest(String test) {
this.test = test;
}
但是如果你有这样的东西,测试它是有意义的(因为有人可能已经改变了你的标记。):
String token=";";
setTestTwo(String testTwo) {
this.testTwo = testTwo + tokenString;
}
答案 5 :(得分:0)
出于以下几个原因,您可能需要/强制进行单元测试getter和setter:
1. Code coverage
2. Automated regression testing
在这些情况下,您可以使用生成这些junit测试用例的库,或者使用泛型编写单个实用程序方法来设置对象,将其取回并比较它们是否相等。