Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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 setter和getter的单元测试_Java - Fatal编程技术网

Java setter和getter的单元测试

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

老师要我们做一个全面的单元测试。对我来说,这将是我第一次使用JUnit。我对测试集和get方法感到困惑。你认为我应该测试它们吗?如果答案是肯定的;这段代码足以进行测试吗

  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不应该是第一个测试的东西,但是假设您已经测试了所有业务逻辑,这会有一点帮助。