仅注入一些属性,嘲笑其他属性

时间:2014-09-15 20:16:02

标签: java spring unit-testing junit jmockit

我正在为Bean编写一个单元测试,它具有一些使用spring自动装配的属性。

这是豆子:

public class Goober {

     @Autowired
     private ObjectX prop1;

     @Autowired
     private ObjectY prop2;


     //... rest of object
}

在我的单元测试中,我想使用jmockit模拟prop1,但是在春天注入了prop2。以下是我的测试结果:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/applicationContext-test.xml" })
public class GooberUT extends TestCase{

    @Tested @Autowired
    Goober goober;

    @Test
    public void gooberTest (@Injectable prop1) {


        // .. test and whatnot here
    }


    // .. setup/teardown etc
}

这里的问题是prop1将由spring自动装配。如果我从测试中删除@Autowired注释,那么prop1将被模拟,但prop2将为null。

如何使用jMockit在Goober中注入一个属性,另一个使用Autowire?

2 个答案:

答案 0 :(得分:1)

你可以让Spring注入prop1,然后用ReflectionTestUtils'覆盖prop1值。 setProperty方法并以编程方式注入您喜欢的任何内容。

答案 1 :(得分:1)

如果ObjectY是一个类而不是一个接口,则可以使用以下测试类:

public class GooberUT
{
    @Tested(fullyInitialized = true)
    Goober goober;

    @Test
    public void gooberTest(@Injectable ObjectX prop1)
    {
        // .. test and whatnot here
    }

    // .. setup/teardown etc
}

使用@Tested(fullyInitialized = true),JMockit将以递归方式实例化并注入测试对象中的所有字段。但是,匹配@Injectable的字段将接收模拟实例。