org.jbehave.core.steps.Steps$DuplicateCandidateFound:那么结果将是 $expected
org.jbehave.core.steps.Steps$DuplicateCandidateFound: THEN the result will be $expected
我有以下 jbehave 故事文件:
Scenario: Scene1
Given the number of <input>
When the result is estimated
Then the result will be <expected>
Examples:
|input|expected|
|1|1|
|2|1, 2|
|3|1, 2, 3|
|4|1, 2, 3, 4|
Scenario: Scene2
Given the number of <input>
When the result is estimated
And the result is sorted in descending order
Then the result will be <expected>
Examples:
|input|expected|
|1|1|
|2|2, 1|
|3|3, 2, 1|
|4|4, 3, 2, 1|
现在我想在我的程序中测试这两种情况,所以我写了下面的代码:
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
public class EstimatorSteps {
private Estimator estimator;
@Given("the number of $input")
public void given(int input) {
estimator = new Estimator(input);
}
@When("the result is estimated")
public void when1() {
estimator.estimate(estimator.getInput());
}
@Then("the result will be $expected)
public void then1(List<Integer> result) {
assertEquals(estimator.getResult(), result);
}
@When("the result is sorted in descending order")
public void when2() {
estimator.descending(estimator.getResult());
}
@Then("the result will be $expected)
public void then1(List<Integer> result) {
assertEquals(estimator.getResult(), result);
}
}
当我 运行 测试用例时,我收到以下错误消息:
org.jbehave.core.steps.Steps$DuplicateCandidateFound: THEN the result
will be $expected
测试这两种情况的正确方法是什么,我必须在我的 Java 代码中做哪些更改。我不想更改我的故事文件。
这是我的 JBehave 配置文件:
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.io.CodeLocations;
import org.jbehave.core.io.LoadFromClasspath;
import org.jbehave.core.io.StoryFinder;
import org.jbehave.core.junit.JUnitStories;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;
import java.util.Arrays;
import java.util.List;
import static org.jbehave.core.io.CodeLocations.codeLocationFromClass;
import static org.jbehave.core.reporters.StoryReporterBuilder.Format.CONSOLE;
public class JBehaveStories extends JUnitStories {
@Override
public Configuration configuration() {
return new MostUsefulConfiguration().useStoryLoader(new LoadFromClasspath(this.getClass()))
.useStoryReporterBuilder(new StoryReporterBuilder()
.withCodeLocation(codeLocationFromClass(this.getClass())).withFormats(CONSOLE));
}
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), new EstimatorSteps());
}
@Override
protected List<String> storyPaths() {
return new StoryFinder().findPaths(CodeLocations.codeLocationFromClass(this.getClass()),
Arrays.asList("**/*.story"), Arrays.asList(""));
}
}
EstimatorSteps
中有两个相同的@Then步骤 class:
@Then("the result will be $expected)
public void then1(List<Integer> result) {
assertEquals(estimator.getResult(), result);
}
....
@Then("the result will be $expected)
public void then1(List<Integer> result) {
assertEquals(estimator.getResult(), result);
}
JBehave 抱怨:
DuplicateCandidateFound: THEN the result will be $expected
删除其中一种方法,错误将不会出现。
顺便说一句,我想知道这个 class 是如何编译的,因为 Java 不应该允许两个具有完全相同签名的重载方法。
我有以下 jbehave 故事文件:
Scenario: Scene1
Given the number of <input>
When the result is estimated
Then the result will be <expected>
Examples:
|input|expected|
|1|1|
|2|1, 2|
|3|1, 2, 3|
|4|1, 2, 3, 4|
Scenario: Scene2
Given the number of <input>
When the result is estimated
And the result is sorted in descending order
Then the result will be <expected>
Examples:
|input|expected|
|1|1|
|2|2, 1|
|3|3, 2, 1|
|4|4, 3, 2, 1|
现在我想在我的程序中测试这两种情况,所以我写了下面的代码:
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
public class EstimatorSteps {
private Estimator estimator;
@Given("the number of $input")
public void given(int input) {
estimator = new Estimator(input);
}
@When("the result is estimated")
public void when1() {
estimator.estimate(estimator.getInput());
}
@Then("the result will be $expected)
public void then1(List<Integer> result) {
assertEquals(estimator.getResult(), result);
}
@When("the result is sorted in descending order")
public void when2() {
estimator.descending(estimator.getResult());
}
@Then("the result will be $expected)
public void then1(List<Integer> result) {
assertEquals(estimator.getResult(), result);
}
}
当我 运行 测试用例时,我收到以下错误消息:
org.jbehave.core.steps.Steps$DuplicateCandidateFound: THEN the result will be $expected
测试这两种情况的正确方法是什么,我必须在我的 Java 代码中做哪些更改。我不想更改我的故事文件。
这是我的 JBehave 配置文件:
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.io.CodeLocations;
import org.jbehave.core.io.LoadFromClasspath;
import org.jbehave.core.io.StoryFinder;
import org.jbehave.core.junit.JUnitStories;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;
import java.util.Arrays;
import java.util.List;
import static org.jbehave.core.io.CodeLocations.codeLocationFromClass;
import static org.jbehave.core.reporters.StoryReporterBuilder.Format.CONSOLE;
public class JBehaveStories extends JUnitStories {
@Override
public Configuration configuration() {
return new MostUsefulConfiguration().useStoryLoader(new LoadFromClasspath(this.getClass()))
.useStoryReporterBuilder(new StoryReporterBuilder()
.withCodeLocation(codeLocationFromClass(this.getClass())).withFormats(CONSOLE));
}
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), new EstimatorSteps());
}
@Override
protected List<String> storyPaths() {
return new StoryFinder().findPaths(CodeLocations.codeLocationFromClass(this.getClass()),
Arrays.asList("**/*.story"), Arrays.asList(""));
}
}
EstimatorSteps
中有两个相同的@Then步骤 class:
@Then("the result will be $expected)
public void then1(List<Integer> result) {
assertEquals(estimator.getResult(), result);
}
....
@Then("the result will be $expected)
public void then1(List<Integer> result) {
assertEquals(estimator.getResult(), result);
}
JBehave 抱怨:
DuplicateCandidateFound: THEN the result will be $expected
删除其中一种方法,错误将不会出现。
顺便说一句,我想知道这个 class 是如何编译的,因为 Java 不应该允许两个具有完全相同签名的重载方法。