Java setter和getter的单元测试
老师要我们做一个全面的单元测试。对我来说,这将是我第一次使用JUnit。我对测试集和get方法感到困惑。你认为我应该测试它们吗?如果答案是肯定的;这段代码足以进行测试吗Java setter和getter的单元测试,java,Java,老师要我们做一个全面的单元测试。对我来说,这将是我第一次使用JUnit。我对测试集和get方法感到困惑。你认为我应该测试它们吗?如果答案是肯定的;这段代码足以进行测试吗 public void testSetandGet(){ int a = 10; Class firstClass = new Class(); firstClass.setValue(10); int value = firstClass.getValue(); Assert.ass
public void testSetandGet(){
int a = 10;
Class firstClass = new Class();
firstClass.setValue(10);
int value = firstClass.getValue();
Assert.assertTrue("Error", value==a);
}
在我的代码中,我认为如果有错误,我们无法知道错误是由setter或getter引起的。如果我是您,我会首先
为我正在测试的类中的属性设置一些值,然后确保get
方法返回相同的值
public void testSetandGet(){
int a = 10;
Class firstClass = new Class();
firstClass.setValue(10);
int value = firstClass.getValue();
Assert.assertEquals(value, a);
}
Roy Osherove在其著名著作《单元测试的艺术》中说:
属性(Java中的getter/setter)是通常不包含任何逻辑且不需要测试的代码的好例子。但是要注意:一旦您在属性中添加了任何检查,您就需要确保正在测试逻辑
您正在测试设置的内容,也可以是“获取”。将Assert
语句更改为:
Assert.assertTrue(a,true)代码>
另外,如果您要使用它,您应该通过a
。我要说的是,不要为setter和getter编写单元测试,除非您的setter和getter包含程序逻辑(某些被称为setter或getter的计算)
在一个实际的项目中,您将有更多的程序逻辑进行单元测试,而不必测试诸如setter和getter之类的琐碎东西。不要对依赖于被测类之外的东西才能工作的任何东西进行单元测试
如果你的getter和setter是微不足道的,那么它们只能在底层JVM/编译器失败的情况下失败——因此你实际上是在测试JVM/编译器,而不是你的代码。我认为如果你有一些条件,这一点很重要。例如,如果它返回一个异常,如果您的int必须为正或其他一些条件。但是如果它只是一个变量赋值,我不认为它有用。。。getter也是如此。如果您想测试它,可以暂时公开变量,然后:
firstClass.setMyInt(5);
Assert.assertTrue(5, firstClass.myInt);
但是,getter和setter可以自动生成,它们通常只在方法中包含一行,如果它们导致代码失败,则可能会出现更大的问题。在单元测试中,麻烦测试getter和setter并不是常见的做法,您可以避免测试它们,并且您的单元测试仍然是全面的。考虑使用Assert.assertEquals(a,value)。此外,如果您使用firstClass.setValue(a)编码>而不是硬编码10
。问问你的老师你是否应该测试它们。因为它是分级的,所以他/她的意见是唯一重要的。有时候人们只需要测试代码覆盖率。当然,您可以自动化访问器的测试,但是……没错,但这实际上可能是一件坏事。考虑这一点:您为所有类编写了GETTER和SETTER的单元测试,但不为您的重要逻辑编写单元测试。您的代码覆盖率很高,但出现错误的可能性也很高。确实是可能的。假设在您完全测试逻辑之后,代码覆盖访问器不会有什么坏处。:)如果有人搞砸了,不经意间对他们做了改变,他们可能会失败。当然,这是一个很小的机会,setter/getter不应该是第一个测试的东西,但是假设您已经测试了所有业务逻辑,这会有一点帮助。