我们正在尝试使用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吗?如果我们需要在步测试类中模拟对象,那么最佳实践是什么?
谢谢!
答案 0 :(得分:0)
我一直在将cucumber-java 1.2.5
与jMockit 1.3.0
一起使用,它的工作原理很吸引人。
没有技巧,没有技巧,没有任何复杂的设置。
唯一发生的是jMockit本身抱怨在其他库之前声明了,我认为这是jUnit。它发生在几天前,并且很容易修复pom
文件,因此我不太在意。
测试运行程序正在使用@RunWith(Cucumber.class)
,在实例化使用“真实”类的类之前,我只需要实例化模拟,这就是常规的jMockit用例。