Cucumber 和 Mockito - 无法初始化模拟
Cucumber and Mockito - Unable to initialize mocks
我正在将 mockito 与 cucumber 一起使用,其中 mocks 和 stepdefinitions 都定义在一个 class 中,工作正常。我现在希望将我的代码重构为更小的步骤定义 classes,而是通过每个 stepDefinition class 中的静态助手访问我的模拟。我的问题是,当它们与我的 stepDefinitions classes 分开时,我无法初始化我的模拟。
模块:
cucumber-junit 4.8.0
cucumber-java 4.8.0
mockito-core 3.3.3
我想做这样的事情:
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {"pretty", "html:target/cucumber"},
features = {"src/test/resources/features"},
glue = {"bdd.steps"},
monochrome = true)
public class RunCucumberTest {
}
public class MockDataHelper{
@Mock private BookService bookService;
@Getter
private static Library library;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
library = new Library(bookService);
}
package bdd.steps;
public class StepsA {
@Given("..") {
...
@When("..") {
MockDataWrapper.getLibrary().rentBook(..);
}
package bdd.steps;
public class StepsB {
@Given("..")
...
}
我可以用工厂方法实现我想要的,但我希望有一个更优雅的解决方案..
public Library getLibrary(){
if(library == null){
library = new Library(mock(bookService.class));
}
return library;
}
非常感谢任何帮助
Cucumber 支持各种依赖注入容器。如果您添加 cucumber-pico
作为依赖项,您所要做的就是声明一个构造函数。当您使用 Lombok 时,这是添加 @RequiredArgConstructor
.
的问题
@RequiredArgConstructor
public class StepsA {
private final MockDataWrapper wrapper
@When("..") {
wrapper.getLibrary().rentBook(..);
}
}
请确保 MockDataHelper
在粘合路径上。否则 @Before
挂钩将不会被触发。
我正在将 mockito 与 cucumber 一起使用,其中 mocks 和 stepdefinitions 都定义在一个 class 中,工作正常。我现在希望将我的代码重构为更小的步骤定义 classes,而是通过每个 stepDefinition class 中的静态助手访问我的模拟。我的问题是,当它们与我的 stepDefinitions classes 分开时,我无法初始化我的模拟。
模块:
cucumber-junit 4.8.0
cucumber-java 4.8.0
mockito-core 3.3.3
我想做这样的事情:
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {"pretty", "html:target/cucumber"},
features = {"src/test/resources/features"},
glue = {"bdd.steps"},
monochrome = true)
public class RunCucumberTest {
}
public class MockDataHelper{
@Mock private BookService bookService;
@Getter
private static Library library;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
library = new Library(bookService);
}
package bdd.steps;
public class StepsA {
@Given("..") {
...
@When("..") {
MockDataWrapper.getLibrary().rentBook(..);
}
package bdd.steps;
public class StepsB {
@Given("..")
...
}
我可以用工厂方法实现我想要的,但我希望有一个更优雅的解决方案..
public Library getLibrary(){
if(library == null){
library = new Library(mock(bookService.class));
}
return library;
}
非常感谢任何帮助
Cucumber 支持各种依赖注入容器。如果您添加 cucumber-pico
作为依赖项,您所要做的就是声明一个构造函数。当您使用 Lombok 时,这是添加 @RequiredArgConstructor
.
@RequiredArgConstructor
public class StepsA {
private final MockDataWrapper wrapper
@When("..") {
wrapper.getLibrary().rentBook(..);
}
}
请确保 MockDataHelper
在粘合路径上。否则 @Before
挂钩将不会被触发。