2016-12-02 107 views
1

我有一个Java类A.A的构造函数调用几个方法m1,m2。测试方法内部方法的最佳方法是什么? (JUnit)

class A{ 

    public A(){ 
     m1(); 
     m2(); 
    ...... } 

    public void m1(){...}; 
    public void m2(){...}; 
} 

如何为这些方法编写测试?我通常写它们为

class TestClass{ 

static A a = null; 

public TestClass(){ 
    a = new A(); 
} 

@Test 
public testm1(){ 
    A.m1(); 
    //Some logic 
} 

但是,这些函数在构造函数中调用。它看起来像我执行两次方法来检查,如果方法写错了,构造函数本身会失败。测试它的正确方法是什么?

+2

重要的是;不要测试方法,测试行为 – JonK

+0

也有帮助:只要避免内部(特别是非静态)类。在eclipse中,你可以通过将光标放在内部类名上,点击“Alt + Shift + T”,而不是点击“V”。这会将你的内部课程移到外面,你可以测试你的想法。特别是你可以模拟外部的A级 –

回答

5

首先,你的界面看起来很奇怪。

你看,有一个公共方法调用另一个公共方法没有太大的意义。所以这里的真正的问题正是你所描述的:事实上你的构造函数调用了m1和m2方法。

要么构造函数调用这些方法,然后他们应该是私人的;或者它们是公共的,但是它不应该是构造函数的责任。

从这个意义上说:答案是退一步,仔细看看你设计的这个方面;如果可能的话,改变它!

无论如何:当你保持你目前的设计;除了测试那些“多次”的东西外,没有别的方法。你会发现:你的测试必须确保你的构造函数能够工作(不管这个ctor是调用m1(),m2()还是m3();或者不是这些)。但是那么你必须确保在你的类的现有实例上调用所有的公共方法也行得通!

最后:你不会因为“他们存在”而调用你的方法。每种方法都应该有明确的目的(又名合同);并编写测试用例来确保这些合同被阻止。

+0

如果我把m1,m2作为公共的,除了一次测试完整的构造函数外,没有办法测试这些单独的函数。我觉得这是一个常见的情况,在很多时候构造函数可能会调用诸如initializeVariables()等许多函数。我们如何测试这些函数? – Sashank

+0

又一次:问题是:您的构造函数应该可能不会调用公共方法。为什么你想要做一些类似“initializeVariables”的**公共**方法,以后可以再次调用......再次? – GhostCat

相关问题