[英]How to mock the InitialContext class with jmockit?
我正在使用jmockit和我的测试,并且我希望测试一个类,直接使用InitialContext
。 所以我有以下内容:
public class MyClass {
public void myMethod() {
InitialContext ic = new InitialContext();
javax.mail.Session mailSession = ic.lookup("my.mail.session");
// rest of method follows.....
}
在我的测试用例中,我将其称为使用我的“模拟” InitialContext
类:
Mockit.redefineMethods(InitialContext.class, MockInitialContext.class);
使用jmockit模拟InitialContext
类的最佳方法是什么。
我已经尝试过几种方法(例如使用我自己的MockInitialContextFactory
),但是MockInitialContextFactory
同样的错误:
NoClassDefFoundError: my.class.MockInitialContext
从我在谷歌上可以看到,与JNDI的嘲笑是非常讨厌的。 请任何人可以向我提供一些指导,或指出我的解决方案? 非常感谢。 谢谢。
我现在已经有一年了,因为有人在这里发帖,但是从最近我用JMockit嘲笑EJB调用,我觉得分享是正确的。 (即使我没有测试它,代码应该非常相似)
您可以在TestCase中将一些Mocked对象定义为字段,如:
@Mocked InitialContext mockedInitialContext;
@Mocked javax.mail.Session mockedSession;
然后在你的testXXX方法中你可以定义你的Expectations(),这样做只需要调用你想要的方法进行测试。
public void testSendindMail(){
new Expectations(){
{
mockedInitialContext.lookup("my.mail.session");returns(mockedSession);
}
};
MyClass cl = new MyClass ();
cl.MyMethod();//This need JNDI Lookup
}
通常,要模拟JNDI,您需要使用一个框架,例如EJBMock,它可以提供一个模拟容器来部署您的bean。
另一种方法是重构从代码中创建上下文以便传入它(这是依赖注入重构),然后你应该能够随意替换mock。
你得到了NoClassDefFoundError,因为my.class.MockInitialContext不存在。 如果要将它作为参数传递给Mockit.redefineMethods(),则需要创建该类。 你的MockInitialContext类只需要一个名为lookup()的方法,它接受一个String参数并返回一个javax.mail.Session。
我喜欢JMockit注释 ,但您可以查看该页面的其余部分,以获取有关如何使用JMockit的其他示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.