在test()函数中执行测试之前,先调用setUp()中其他类的所有静态方法,包括main

时间:2014-04-15 04:07:25

标签: java object junit tdd static-methods

我正在开发一个应用程序,让我们说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);
        }
    }

1 个答案:

答案 0 :(得分:2)

您需要重构代码以使其更易于测试。这是TDD的主要好处 - 如果代码难以测试,那么它可能很难维护,理解等等。

关于您的示例代码,对于测试C类,单元测试应该只测试C上的方法,就像您的示例所示。不要担心C的无效输入 - 这不是C的责任,因此它不会在C的单元测试中进行测试。

要测试验证,您将为A类编写单元测试,并使用不同的输入调用验证方法并检查结果。