我编写了一个JUnit测试,使用Mockito和PowerMock模拟一些类。我试图将其转换为cucumber测试,但静态的PowerMock特性不起作用。
两类相关cucumber的提取物:
@RunWith(Cucumber.class)
public class JWTValidatorBDDTest {
}
public class JWTValidatorCukeTest {
String tokenValue;
JWTValidator jwtValidator;
MockHttpServletRequest mockRequest;
@Before
public void before() throws IOException {
this.mockRequest = new MockHttpServletRequest();
PowerMockito.mockStatic(JWTAuthConnectionManager.class);
BDDMockito.given(JWTAuthConnectionManager.postToken(anyString(), anyString(), anyString())).willReturn(200);
Mockito.doReturn(200).when(JWTAuthConnectionManager.postToken(anyString(), anyString(), anyString()));
}
@Given("^a JWT token with the value (.*)")
public void a_JWT_token_with_the_value_(String token) {
this.jwtValidator = new JWTValidator("https://test.7uj67hgfh.com/openam", "Authorization", "Bearer");
this.tokenValue = token;
}
虽然这段代码在JUnit测试中工作,但它在这里失败了--它进入了jWTauthConnectionManager.postToken()
方法,该方法应该被模拟,然后通过在其中执行代码而失败。我试着加了几行:
@RunWith(PowerMockRunner.class)
@PrepareForTest(JWTAuthConnectionManager.class)
对上述两个类(当然,我不能在runnith
类中使用runwith
,因为它已经有一个runwith
注释),但这不会改变任何事情。
如何让PowerMock在Cucumber中工作?
似乎现在可以使用@PowerMockRunnerDelegate注释。我使用了@RunWith(PowerMockRunner.class)和@PowerMockRunnerDelegate(Cucumber.class),它起作用了。我从这里得到了一个建议:https://medium.com/@wznote/how-to-make-spock-and-powermock-work-together-a1889e9c5692
从版本1.6.0开始,PowerMock支持将测试执行委托给另一个JUnit运行程序,而不使用JUnit规则。这就把实际的测试执行留给了您选择的另一个运行程序。例如,测试可以委托给“SpringJUnit4ClassRunner”、“Parameterized”或“Enclosed”Runner。
还有使用@rule:PowerMockRule rule=new PowerMockRule()的选项;而不是@RunWith(PowerMockRunner.class)(所以Runner可以是其他东西)--但是Stefan Birkner的评论建议Cucumber Runner应该支持使用它的规则,我不确定(现在)它是否支持。
希望能帮到别人。
试图看到一个在Cucumber中使用软断言的工作示例。我有以下简单的特性和步骤定义,我故意使一些验证失败,但cucumber测试仍然显示“通过”。我是不是做错什么了。 @给定(“^I have a Scenary for Soft Assert$”)public void i_have_a_scenario_for_soft_assert()throwsable{
以前,为了简单起见,我们有正确的端口来访问它。有些人(不是我)做了一个更改,删除了硬代码以及其他更改,但它们并没有完全工作,所以其他一些人和我改回了硬代码,以便使开发环境工作。现在,开发环境完全像它应该的那样工作,但是cucumber测试发送一个连接拒绝错误,就像rest API服务器没有打开一样,即使它是打开的。我希望我能给出更多关于这方面的信息,但由于我没有做出改变,我不知道一切都改变了什么。
我从Cucumber 1.2.5升级到Cucumber 5.6.0。升级进行得很顺利,但是我的扩展报告坏了。我尝试升级它们并使用Cucumber 4适配器。文件很稀少,我无法让它工作。所以我去下载了示例实现。我能够编译和运行它,并获得报告。我将示例项目升级到Cucumber 4.8.1,将Extent Reporter升级到4,然后运行,但没有创建报告。我不知所措,我的谷歌搜索没有找到任何信息。
我似乎有一些问题与耙子和我的cucumber特征文件。 这是詹金斯的命令。它指定了我直接放在。/features目录,所以testjson.feature就在那里。 Rakefile看起来像这样: 这非常简单,但在 Jenkins 的控制台输出中,我得到: 这告诉我它没有找到功能文件,对吗? 当我转到功能文件上方的目录并运行Cucumber时,测试就可以了! 所以,很明显我的Rake文件出错了。有
我使用的是commercehub oss/gradle cucumber jvm插件。希望实现自动设置和拆卸的挂钩。就像在junit RunCuketTests中,@BeforeClass和@AfterClass 如何在此插件的自动化中实现这些? https://github.com/commercehub-oss/gradle-cucumber-jvm-plugin
真希望有人能帮上忙。 在cucumber的“示例”中是否可以使用两个不同的外部数据文件?如下所示: @play_movie 场景概述:在网站上播放视频 在这个场景中有一个数据文件,但是如果我想在这个场景中使用两个或更多不同的数据文件呢。有可能用cucumber做吗? 我使用Java作为编码语言。 谢谢