在Junit中测试多个构造函数的正确方法是什么?

时间:2019-02-11 14:50:51

标签: java unit-testing junit

我应该忽略新构造函数的单元测试吗?我应该为不同的构造函数创建一个新的Test类,然后仅复制测试吗?测试本身没有改变。如果有一种方法可以使用不同的构造函数运行每个测试,那就太好了。为了可视化正在发生的事情,我在下面添加了代码。

我有一堂课,看起来像这样:

public class Foo {
    public Foo() {...}

    public void doStuff(){...}
    public void doThing(){...}
}

我有一个看起来像这样的测试类:

public class FooTest {
    Foo foo;

    @Before
    public void setUp() {
        foo = new Foo();
    }

    @Test
    public void fooCanDoThing() {
        foo.doThing();
        assertThat(...);
    }

    @Test
    public void fooCanDoStuff() {
        foo.doStuff();
        assertThat(...);
    }
}

我最近完成了一项任务,其中包括向foo类添加更多构造函数

public class Foo {
    ...
    public Foo(String bleh) {...}
    public Foo(String bleh, String blah) {...}
    ...
}

使用多个构造函数进行测试的最佳方法是什么?

编辑:为了清除某些内容,foo扩展了

public class Foo extends Thing {...}

可以说Thing具有getBlah的功能,我已经测试过getBlah。但是现在,我实际上可以设置自己的“等等”。

1 个答案:

答案 0 :(得分:1)

您应该在测试班级中测试SUT的行为。

如果该附加的构造函数参数为您的类引入了新的行为,则应使用有意义的名称为其创建测试:

shouldDoThingXXX_givenBleh()

shouldDoThingYYY_givenBlehAndBlah()

那么最有可能的是,如果您仅设置一个变量,那么您当前的测试将像以前一样运行,但是引入另一个变量是否会引入新的行为路径以及某些功能的不同可能结果?

如果是,则应使用其他明确命名的测试来耗尽它们。

总结添加一个新的构造函数并不意味着现有测试量会增加一倍,但这可能取决于SUT的引入/更改行为。