繁体   English   中英

如何使用jmockit模拟InitialContext类?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM