我正在开发一个应用程序,让我们说A类有主要功能,B类有getter& setter方法,C类有一些计算。
A类具有用户验证静态方法,以确保用户输入正确
B类的对象实例是在A&#39的主要功能和创建中创建的。用户输入' A'中的那些验证使用getter& amp; B.的设定方法
我正在使用Junit测试我的程序。在C类中测试计算函数时的问题是,A中的用户验证没有被调用。我不想一个接一个地打电话给他们,但我想知道我怎么能打电话给某个班级&它的所有静态方法,包括来自另一个类的main,以便我在测试时所做的就是调用@Test和@setUp中的计算函数,调用类A的静态方法,以便我的calc函数在之前被正确验证运行
import code.B;
import code.C;
class A
{
private static int number1=5;
private static int number1=50;
public static final MSG_ERROR="input is null";
private static String error="";
private static boolean result=true;
p s v m(String[] args)
{
B b = new B();
int num1 = b.setValNum1(number1);
int num2 = b.setValNum2(number2);
if(!validateInput(num1,num2))
{
System.exit(1);
}
else
{
C.calc(num1,num2);
}
}
/* There are lot of validations just like this */
public static boolean validateInput(int num1,int num2)
{
if(number1 == null || number2 == null)
{
error = MSG_ERROR;
result = false;
}
return result;
}
}
class B
{
private static int num1;
private static int num2;
private getValNum1()
{
return num1;
}
private getValNum2()
{
return num2;
}
private setValNum1(int num1)
{
this.num1 = num1;
}
private setValNum2()
{
this.num2 = num2;
}
}
class C
{
public static int calc(int a,int b)
{
Sopln("add:"+(a+b));
return (a+b);
}
}
class Ctest
{
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testCalc()
{
int num1 = 4;
int num2 = 1;
int expected = 5;
/* Here if I provide num1 as null
then it will throw a error
when I have already validated
in class A for the same.
*/
int actual = C.calc(num1, num2);
assertEquals(expected,actual);
}
}
答案 0 :(得分:2)
您需要重构代码以使其更易于测试。这是TDD的主要好处 - 如果代码难以测试,那么它可能很难维护,理解等等。
关于您的示例代码,对于测试C类,单元测试应该只测试C上的方法,就像您的示例所示。不要担心C的无效输入 - 这不是C的责任,因此它不会在C的单元测试中进行测试。
要测试验证,您将为A类编写单元测试,并使用不同的输入调用验证方法并检查结果。