这是测试构造函数的有效方法吗?

时间:2018-01-09 23:16:08

标签: java testing junit constructor

我最近开始使用OOP(使用Java)并且想知道下面的代码是否可以使用Junit测试验证构造函数是否已经过良好测试:

@Test
public void testConstructor() {
    MyClass c1 = new myClass("Text", 1);
    MyClass c2 = new myClass("Text", 1);
    assertEquals(c1,c2);
}

@Test
public void testConstructor2() {
    MyClass c1 = new myClass("Text", 1);
    MyClass c2 = new myClass("Text", 2);
    assertNotEquals(c1,c2);
}

虽然它对我来说似乎是一个有效的检查,但我仍然有点困惑,因为我发现的关于构造函数测试的大多数示例都使用.get()方法。

任何澄清都将不胜感激!

2 个答案:

答案 0 :(得分:2)

如果你的构造函数做了很多琐碎的事情(比如设置字段),那么你就不需要专门对它进行单元测试。你不会对你的代码有很大的信心(因为你可能有很多东西 - 它没有做太多可能会出错),而其他实例化和使用对象的测试本来就会测试你没有& #39;制造琐碎的错误。

如果你的构造函数做了一些复杂的事情,你可能最好将该逻辑转换为一个包私有静态方法,然后单独测试该方法。如果这不合理(例如,逻辑设置多个字段),那么您的单元测试应该测试您期望的特定状态:

MyClass object = MyClass("Text", 1);
assertEquals("someComplicatedValue", object.getSomeField());

你不应该只是测试对象的平等性,因为它并不能告诉你字段是否正确,只是它们是相同的给定相同的输入。

答案 1 :(得分:0)

除了一些变量初始化之外,通常你不会在构造函数中放置任何逻辑。使用依赖注入也需要保持干净。 Equals将调用equals方法,因此上述内容不会是对创建的票价测试。在这种情况下,只有白盒测试工作,比如给构造函数等提供无效的参数,因为你必须问什么可能出错......