【问题标题】:Test class for Abstract class with no default constructor and private method?没有默认构造函数和私有方法的抽象类的测试类?
【发布时间】:2015-04-19 12:45:45
【问题描述】:

我的项目有问题,我在一些示例中提出了我的问题。

package com.sample.code;

public abstract class AbstractClass {

    public String var1;

    //in this class NO default constructor

    public String method1(){
        return "method1 "+privateMethod();
    }

    protected AbstractClass(String var1){
        this.var1=var1;
    }

    private String privateMethod(){
        return "private method";
    }
}

我有一个由我的实际方法使用的私有方法和一个受保护的单参数构造函数。

我需要为我的“method1()”编写测试用例。
我需要使用 junit 和 EasyMock。

【问题讨论】:

  • 你想在这里测试什么?测试用例是什么样的?
  • 实际上我想测试 method1(),但是我如何在我的测试用例中调用该方法而不创建我的类的对象。我什至无法扩展这个类来编写一个模拟类,因为它没有t 有一个默认构造函数。我想这样测试,assertEquals("method1 private method",objectOfActualclass.method1());
  • 你不能。它是一个抽象类。顺便说一句,如果您没有定义任何构造函数,JDK 会为您提供默认构造函数。你可以嘲笑它,但这对你没有帮助。你可能有具体的课程。用那个来称呼它?

标签: java junit4 easymock testcase


【解决方案1】:

我会使用具体的类实现来测试它,例如:

 MyConcreteClass clazz = ..;//MyConcreteClass could be local class or actual production class
 Assert.assertEquals("method1 private method",clazz.method1());

【讨论】:

    【解决方案2】:

    测试类也是一个典型的java类,它可以扩展其他类,甚至是测试类,所以你可以这样做:

    class AbstractClassTest extends AbstractClass
    {
        public AbstractClassTest()
        {
            super("some_string");
        } 
        @Test
        public void testMethod1()
        {
             //....
        }
    }
    

    由于测试类是扩展基类,你必须在它的构造函数中调用基类构造函数。您没有此私有字段的设置器,因此如果您需要测试更多实例,您可以在测试类中实例化测试类:

    AbstractClassTest abc = new AbstractClassTest("other_string");
    

    为此,您需要第二个 ctor 用于测试类:

    public AbstractClassTest(String param)
    {
        super(param);
    }
    

    【讨论】:

    • 如果我这样做会引发错误...因为我的类中的构造函数是受保护的。
    • protected 表示它可以被扩展抽象类的类使用,测试类可以使用它,所以错误是由其他原因引起的。
    • 我的 IDE 不允许我扩展该类,它要求我在我的主类中定义一个显式构造函数。
    • 我的测试类构造函数名称有错误,如果你修复它应该没问题
    • 另外,我只是在 netbeans 8 上使用 Java 7 完成的,没有问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2012-07-22
    • 2022-01-22
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多