当前位置: 首页 > 知识库问答 >
问题:

在cucumber上使用PowerMock

易焱
2023-03-14

我编写了一个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中工作?

共有1个答案

柯河
2023-03-14

似乎现在可以使用@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作为编码语言。 谢谢