在Cucumber步骤测试中模拟对象? “JMockit未正确初始化”错误

时间:2016-09-30 18:54:42

标签: java junit cucumber jmockit

我们正在尝试使用Gherkin / Cucumber进行单元测试。在maven项目中,我们习惯使用JUnit / Jmockit以下列格式进行单元测试,效果很好。

以前的旧Junit测试类:

@RunWith(JMockit.class)
public class UnitTestClass{
    @Mocked
    AClass mockedObject;

    @Test
    public void AMethodTest() {
        try {
            new NonStrictExpectations() {
                {
                    ExampleObject.callAMethod();
                    result = mockedObject;
                }
            };
                     Assert.assertEquals(xxxxx);
                catch(Exception e){
                }  
}

在开始使用Gherkin / Cucumber之后,我们正在用以下两个类编写Unit类:

@RunWith(Cucumber.class)
@CucumberOptions (features = "src/test/java/feature/")
//@RunWith(JMockit.class)
public class UnitTestClass{
}


@RunWith(JMockit.class)
public class UnitTestClassSteps{

    @Given("^an input data id: '(\\d+)'\\.$")
    @Test
    public void a_data_ID(int arg1) throws Throwable {

            try {
                **new NonStrictExpectations() {**
                    {
                        ExampleObject.callAMethod();
                        result = mockedObject;
                    }
                };
                    Assert.assertEquals(xxxxx);
               catch(Exception e){
               } 
   }

一旦我们开始运行UnitTestClass,它会跳转到UnitTestClassStep类,并在新的NonStrictExpectations步骤失败,错误是:

java.lang.AssertionError:调用Given步骤时出现异常 JMockit未正确初始化;检查jmockit.jar是否在类路径中的junit.jar之前(如果使用JUnit;如果没有,请检查文档)     在org.junit.Assert.fail(Assert.java:88)

那么我们可以在Cucumber步测试类中使用Jmockit吗?如果我们需要在步测试类中模拟对象,那么最佳实践是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

我一直在将cucumber-java 1.2.5jMockit 1.3.0一起使用,它的工作原理很吸引人。 没有技巧,没有技巧,没有任何复杂的设置。

唯一发生的是jMockit本身抱怨在其他库之前声明了,我认为这是jUnit。它发生在几天前,并且很容易修复pom文件,因此我不太在意。

测试运行程序正在使用@RunWith(Cucumber.class),在实例化使用“真实”类的类之前,我只需要实例化模拟,这就是常规的jMockit用例。