10

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

  public void testSetandGet(){
    int a = 10;
    Class firstClass = new Class();
    firstClass.setValue(10);
    int value = firstClass.getValue();
    Assert.assertTrue("Error", value==a);
  }

在我的代码中,我认为如果有错误,我们无法知道错误是由于 setter 或 getter 导致的。

4

6 回答 6

19

我想说不要为 setter 和 getter 编写单元测试,除非你的 setter 和 getter 包含程序逻辑(在调用 setter 或 getter 时计算的东西)。

在一个真实的项目中,您将拥有大量的程序逻辑来进行单元测试,而不必测试诸如 setter 和 getter 之类的微不足道的东西。

于 2013-05-28T17:10:04.683 回答
5

Roy Osherove 在他的名著《单元测试的艺术》中说:

属性(Java 中的 getter/setter)是很好的代码示例,通常不包含任何逻辑,也不需要测试。但请注意:在属性中添加任何检查后,您需要确保正在测试逻辑。

您正在测试您设置的内容,也可以“获取”。Assert将您的声明更改为:

Assert.assertTrue(a, true);

另外,a如果你要使用它,你应该通过。

于 2013-05-28T17:08:57.090 回答
3

我认为如果你有一些条件是很重要的。例如,如果它返回异常,如果您的 int 必须为正数或其他一些条件。但如果只是变量赋值,我觉得没什么用……getter也是一样。

于 2013-05-28T17:11:07.050 回答
2

如果我是你,我会首先set为我正在测试的类中的属性设置一些值,然后确保该get方法返回相同的值。

public void testSetandGet(){
    int a = 10;
    Class firstClass = new Class();
    firstClass.setValue(10);
    int value = firstClass.getValue();
    Assert.assertEquals(value, a);
}
于 2013-05-28T17:08:26.573 回答
1

如果您想对其进行测试,您可以暂时将变量公开,然后:

firstClass.setMyInt(5);
Assert.assertTrue(5, firstClass.myInt);

然而,getter 和 setter 可以自动生成,它们通常在方法中只包含一行,如果它们导致你的代码失败,你可能会遇到更大的问题。单元测试不习惯测试 getter 和 setter,你可以避免测试它们,你的单元测试仍然是全面的。

于 2013-05-28T17:12:02.533 回答
1

不要对任何依赖于被测类之外的东西的东西进行单元测试。

如果你的 getter 和 setter 是微不足道的,那么它们只会在底层 JVM/编译器失败的情况下失败——所以你实际上是在测试 JVM/编译器,而不是你的代码。

于 2013-05-28T17:10:42.380 回答