首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerMock与黄瓜配合使用

PowerMock与黄瓜配合使用
EN

Stack Overflow用户
提问于 2015-12-01 17:11:38
回答 2查看 3.2K关注 0票数 5

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

两个相关的黄瓜类的摘录:

Runner

代码语言:javascript
复制
@RunWith(Cucumber.class)
public class JWTValidatorBDDTest {
}

步骤类

代码语言:javascript
复制
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()方法,然后通过在其中执行代码而失败。我试过增加台词:

代码语言:javascript
复制
@RunWith(PowerMockRunner.class)
@PrepareForTest(JWTAuthConnectionManager.class)

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

如何让PowerMock在Cucumber中工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-03 14:41:22

现在看来,使用@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”、“参数化”或“封闭”运行程序。

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

希望它能帮到别人。

票数 1
EN

Stack Overflow用户

发布于 2015-12-01 17:57:41

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34026053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档