Using PowerMock with Cucumber



我编写了一个JUnit测试,它使用Mockito和PowerMock来模拟一些类。我试图将其转换为Cucumber测试,但静态PowerMock功能不起作用。

两个相关黄瓜类的提取物:

转轮

@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)

到上面两个类(当然我不能在Runner类中使用RunWith,因为它已经有一个RunWith注释),但这不会改变任何事情。

如何让PowerMock在Cucumber中工作?

现在似乎可以使用@PowerMockRunnerDelegate注释了。我使用@RunWith(PowerMockRunner.class)和@PowerMockRunerDelegate(Cucumber.class),它正在工作。从这里得到建议:https://medium.com/@WZ注释/如何制作pock-and-powermock-work-to-gether-a889e9c5692

自1.6.0版本以来,PowerMock支持在不使用JUnit规则的情况下将测试执行委派给另一个JUnit运行程序。这将实际的测试执行留给您选择的另一个运行程序。例如,测试可以委托给"SpringJUnit4ClassRunner"、"Parameterized"或"Enclosed"runner。

还有使用@Rule:PowerMockRulerule=new PowerMockRule()的选项;而不是@RunWith(PowerMockRunner.class)(所以Runner可以是其他东西)-但Stefan Birkner的评论建议Cucumber Runner应该支持使用它的规则,我不确定它是否支持(现在)。

希望它能帮助到别人。

您不能使用PowerMockRunner,因为一个测试只能有一个运行程序(在您的情况下是Cucumber)。但是AFAIK您可以使用PowerMockRule而不是PowerMockRunner

相关内容

  • 没有找到相关文章

最新更新