Java 模拟需要在单元测试中测试的同一类的静态方法

Java 模拟需要在单元测试中测试的同一类的静态方法,java,unit-testing,Java,Unit Testing,我有一个类,它有多个静态方法。1个静态方法调用另一个私有方法,该私有方法最终调用第二个公共静态方法。我想模拟第二个静态方法。那有可能吗。 e、 g 我想模拟c(),但想保持a()和b()的功能不变。这可能吗?如果是这样,怎么做?这个现有的so告诉您如何使用PowerMockito、静态模拟和Mockito的spy概念来实现这一点 但是输入中缺少了什么:尽管这些技术解决方案是有效的,但是你应该考虑不要沿着这条路径走下去。p> 相反:您创建了一个难以测试的设计。现在,您正在使用(黑色)模拟魔法来启用

我有一个类,它有多个静态方法。1个静态方法调用另一个私有方法,该私有方法最终调用第二个公共静态方法。我想模拟第二个静态方法。那有可能吗。 e、 g

我想模拟c(),但想保持a()和b()的功能不变。这可能吗?如果是这样,怎么做?

这个现有的so告诉您如何使用PowerMockito、静态模拟和Mockito的spy概念来实现这一点

但是输入中缺少了什么:尽管这些技术解决方案是有效的,但是你应该考虑不要沿着这条路径走下去。p> 相反:您创建了一个难以测试的设计。现在,您正在使用(黑色)模拟魔法来启用测试。真正的答案是:后退一步,评估你的设计。尝试对其进行返工,使其变得易于测试

从长远来看,其他任何事情都是浪费时间和精力。因为难以测试的设计也很难在“真实”场景中进行测试,而且它们通常是不灵活的,很难随着时间的推移进行维护/增强

这告诉您如何使用PowerMockito、静态mocking和spyMockito的概念来实现这一点

但是输入中缺少了什么:尽管这些技术解决方案是有效的,但是你应该考虑不要沿着这条路径走下去。p> 相反:您创建了一个难以测试的设计。现在,您正在使用(黑色)模拟魔法来启用测试。真正的答案是:后退一步,评估你的设计。尝试对其进行返工,使其变得易于测试


从长远来看,其他任何事情都是浪费时间和精力。因为难以测试的设计也很难在“真实”场景中进行测试,而且它们通常是不灵活的,很难随着时间的推移进行维护/增强

>P>@ GooGeCCAT:嘲笑静态方法的需要是糟糕的设计气味,所以你首先应该考虑重构代码,这样你就不需要静态嘲讽了。 Mockito不支持静态方法的模拟。 更多细节

您可以使用

例如:

PowerMockito.stub(PowerMockito.method(YourStaticClass.class, "c")).toReturn("someValue"); 

BTW:似乎你的方法没有返回类型。

AS @ GooTeCK:嘲笑静态方法的需要是坏设计的气味,所以你首先应该考虑重构你的代码,这样你就不需要静态嘲讽了。 Mockito不支持静态方法的模拟。 更多细节

您可以使用

例如:

PowerMockito.stub(PowerMockito.method(YourStaticClass.class, "c")).toReturn("someValue"); 

顺便说一句:您的方法似乎没有返回类型。

如果答案重定向到正确的干净路径,而不是仅仅指向一个可以解决问题但确实不应该使用的解决方案,我会很感激,因为它会鼓励糟糕的设计。@Nkosi欢迎您。就在前几周,我们遇到了另一个团队几年前编写的一个旧的PowerMock单元测试。我们没有改变任何与之相关的东西,但突然之间,那个测试失败了,阻止了我们的构建通过。除非你别无选择,否则你真的会远离PowerMock(ito)…我很感激答案重定向到正确的干净路径,而不是仅仅指向一个可以解决问题但确实不应该使用的解决方案,因为它会鼓励糟糕的设计。@Nkosi欢迎你。就在前几周,我们遇到了另一个团队几年前编写的一个旧的PowerMock单元测试。我们没有改变任何与之相关的东西,但突然之间,那个测试失败了,阻止了我们的构建通过。除非你绝对没有其他选择,否则你真的会远离PowerMock(ito)…并且只是为了记录:不要忘记在某个时候接受一个有用的答案,新手太频繁了。。。忘掉那部分;-)记录在案:别忘了在某个时候接受一个有用的答案,新手太频繁了。。。忘掉那部分;-)