Ben*_*son 5 java junit unit-testing cucumber powermock
我编写了一个 JUnit 测试,它使用 Mockito 和 PowerMock 来模拟一些类。我正在尝试将其转换为 Cucumber 测试,但静态 PowerMock 功能不起作用。
两个相关 Cucumber 类的摘录:
赛跑者
@RunWith(Cucumber.class)
public class JWTValidatorBDDTest {
}
Run Code Online (Sandbox Code Playgroud)
步骤类
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;
}
Run Code Online (Sandbox Code Playgroud)
虽然这段代码在 JUnit 测试中工作,但它在这里失败了 - 它进入JWTAuthConnectionManager.postToken()应该被模拟的方法,然后通过在那里执行代码而失败。我试过添加以下几行:
@RunWith(PowerMockRunner.class)
@PrepareForTest(JWTAuthConnectionManager.class)
Run Code Online (Sandbox Code Playgroud)
到上述两个类(当然我不能RunWith在Runner类中使用,因为它已经有一个RunWith注释),但这不会改变任何东西。
如何让 PowerMock 在 Cucumber 中工作?
似乎现在可以使用 @PowerMockRunnerDelegate 注释。我使用 @RunWith(PowerMockRunner.class) 和 @PowerMockRunnerDelegate(Cucumber.class) 并且它正在工作。从这里获取建议:https://medium.com/@WZNote/how-to-make-spock-and-powermock-work-together-a1889e9c5692
\n\n\n\n\n从版本 1.6.0 开始,PowerMock 支持将测试执行委托给另一个 JUnit 运行程序,而无需使用 JUnit 规则。这将实际的测试执行留给您选择的另一个运行程序。例如,测试可以委托给 \xe2\x80\x9cSpringJUnit4ClassRunner\xe2\x80\x9d、\xe2\x80\x9cParameterized\xe2\x80\x9d 或 \xe2\x80\x9cEnlined\xe2\x80\x9d 运行程序。
\n
还有使用 @Rule 的选项: PowerMockRule Rule = new PowerMockRule(); 而不是 @RunWith(PowerMockRunner.class) (所以 Runner 可以是其他东西) - 但 Stefan Birkner 的评论表明 Cucumber runner 应该支持使用它的规则,我不确定它是否支持(现在)。
\n\n希望它能帮助某人。
\n| 归档时间: |
|
| 查看次数: |
2789 次 |
| 最近记录: |