目录
Gradle依赖
testImplementation 'io.cucumber:cucumber-java8:7.2.3'
testImplementation 'io.cucumber:cucumber-junit:7.2.3'
implementation 'io.cucumber:cucumber-guice:7.2.3'
implementation 'com.google.inject:guice:5.1.0'
新建Feature文件
@test
Feature: Two number addition
Scenario: Verify two number addition
Given two number addition and verify
新建Step文件
import com.appautomation.learn.learnguice.TwoNumAddition;
import com.google.inject.Inject;
import io.cucumber.java8.En;
import org.junit.Assert;
public class TwoNumAddSteps implements En{
@Inject
public TwoNumAddSteps(TwoNumAddition twoNumAddition) {
Given("^two number addition and verify$", () -> {
int a = 10;
int b = 20;
int expectedResult = a + b;
int actualResult = twoNumAddition.twoNumAdd(a, b);
Assert.assertEquals(expectedResult, actualResult);
});
}
}
新建Interface
public interface TwoNumAddition {
int twoNumAdd(int a, int b);
}
实现Interface
public class TwoNumAdditionImpl implements TwoNumAddition{
@Override
public int twoNumAdd(int a, int b) {
return a + b;
}
}
新建Module binding
import com.google.inject.AbstractModule;
public class TestModule extends AbstractModule {
@Override
protected void configure() {
//将Interface绑定到具体的实现类
bind(TwoNumAddition.class).to(TwoNumAdditionImpl.class);
}
}
实现CustomObjectFactory 类
import com.appautomation.learn.learnguice.TestModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
import io.cucumber.core.backend.ObjectFactory;
import io.cucumber.guice.CucumberModules;
import io.cucumber.guice.ScenarioScope;
public final class CustomObjectFactory implements ObjectFactory {
private final Injector injector;
public CustomObjectFactory() {
// Create an injector with our service module
this.injector =
Guice.createInjector(
Stage.PRODUCTION,
CucumberModules.createScenarioModule(),
new TestModule());
}
@Override
public boolean addClass( Class< ? > clazz ) {
return true;
}
@Override
public void start() {
this.injector.getInstance( ScenarioScope.class ).enterScope();
}
@Override
public void stop() {
this.injector.getInstance( ScenarioScope.class ).exitScope();
}
@Override
public < T > T getInstance( Class< T > clazz ) {
return this.injector.getInstance( clazz );
}
}
新建ObjectFactory
新建src/test/resources/META-INF/services,该目录下新增文件io.cucumber.core.backend.ObjectFactory,文件内容为:
com.app.automation.conf.CustomObjectFactory
新建cucumber.properties文件
cucumber.object-factory=com.app.automation.conf.CustomObjectFactory
直接执行Fearute文件输出如下: