2016-10-10 303 views
0

我有一个jUnit类,它扩展了一个我需要测试的受保护方法的类。现在实例化jUnit测试类

@RunWith(...) 
@Configuration(...) 
public class testA extends A{ 
    @Test 
    public void testProtectedMethod1(){ 
    .. 
    } 
} 

,类A需要一定的变量(DAO)来实例化的同时进行设置。运行此代码会引发IllegalArgumentException - 必须提供DAO。

事情我已经尝试:

1)手动设置使用@Before的DAO - 没有工作

2)指定用于DAO的属性集测试类豆 - 没有工作。

如何使用继承的属性实例化此jUnit类?

+0

A类如何获得DAO?它是一个构造函数参数吗? –

+0

类A扩展了另一个具有此DAO变量的类B.类A没有构造函数。我们使用p:DAO在类A的bean定义中设置DAO ... – user2780757

+0

为什么不将DAO类标记为Spring bean,并使用'@ Autowired'将它注入到需要的地方? –

回答

0

事实证明,我不能注入任何jUnit测试类的属性,因为它的对象是由jUnit运行时本身实例化的。无论如何,我最终使用反射来测试私有方法。

0

您的正在测试的类应该不是您在单元测试类中继承的类。另外,由于JUnit(甚至Java)的设计方式,测试私有方法本质上很困难(如果不是不可能的话)。

使用单元测试和T-D-D的关键在于能够测试您的课程的公共方法。如果您试图测试私有方法,您可能首先需要重新考虑您的(功能性)类设计。它是否遵循Single Responsibility Principle

如果您希望对我们只测试公共方法的一般规则做出例外,可能会使您的私有方法受到保护或访问包(并确保您的测试类与测试中的类具有相同的包名称)。

无论哪种方式,在JUnit中让您的测试类从测试中的类继承是不好的做法,您应该避免这种情况。

+0

事实证明,我不能注入jUnit测试类的任何属性,因为它的对象是由jUnit运行时本身实例化的。无论如何,我最终使用反射来测试私有方法。谢谢! – user2780757