我正在使用Green Coffee library在我的仪器测试中运行Cucumber方案。我按照repo一步一步提供的示例,但这里是错误:
junit.framework.AssertionFailedError: Class pi.survey.features.MembersFeatureTest has no public constructor TestCase(String name) or TestCase()
当我尝试将默认构造函数添加到类provided here这样的类时,它会说
没有可用的默认构造函数 'com.mauriciotogneri.greencoffee.GreenCoffeeTest'
这是我的测试的源代码:
package pi.survey.features;
import android.support.test.rule.ActivityTestRule;
import com.mauriciotogneri.greencoffee.GreenCoffeeConfig;
import com.mauriciotogneri.greencoffee.GreenCoffeeTest;
import com.mauriciotogneri.greencoffee.Scenario;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.io.IOException;
import pi.survey.MainActivity;
import pi.survey.steps.memberSteps;
@RunWith(Parameterized.class)
public class MembersFeatureTest extends GreenCoffeeTest {
@Rule
public ActivityTestRule<MainActivity> activity = new ActivityTestRule<>(MainActivity.class);
public MembersFeatureTest(Scenario scenario) {
super(scenario);
}
@Parameterized.Parameters
public static Iterable<Scenario> scenarios() throws IOException {
return new GreenCoffeeConfig()
.withFeatureFromAssets("assets/members.feature")
.scenarios();
}
@Test
public void test() {
start(new memberSteps());
}
}
我的members.feature
来源:
Feature: Inserting info to server
Scenario: Invalid members
When I introduce an invalid members
And I press the login button
Then I see an error message saying 'Invalid members'
答案 0 :(得分:1)
通过修复结构解决了问题。
答案 1 :(得分:1)
关于构造函数的问题。由于 GreenCoffee 中的测试需要:
@RunWith(Parameterized.class)
使用@Parameters
注释的静态方法必须返回某个列表(但不一定是Scenario)。文档中的示例只返回一个场景列表,这就是构造函数必须将一个场景作为参数的原因。
但是,您可以创建一个类,该类封装您可能需要传递给构造函数的场景和其他对象。例如,给定以下类:
public class TestParameters
{
public final String name;
public final Scenario scenario;
public TestParameters(String name, Scenario scenario)
{
this.name = name;
this.scenario = scenario;
}
}
你可以写:
public TestConstructor(TestParameters testParameters)
{
super(testParameters.scenario);
}
@Parameters
public static Iterable<TestParameters> parameters() throws IOException
{
List<TestParameters> testParametersList = new ArrayList<>();
List<Scenario> scenarios = new GreenCoffeeConfig()
.withFeatureFromAssets("...")
.scenarios();
for (Scenario scenario : scenarios)
{
testParametersList.add(new TestParameters(scenario.name(), scenario));
}
return testParametersList;
}
通过这种方式,您可以在测试构造函数中接收多个值(封装在对象中)。