【问题标题】:Mockito static function mock [duplicate]Mockito静态函数模拟[重复]
【发布时间】:2014-06-01 19:22:47
【问题描述】:

我有一堂课:

class Abc
{
    public static int fun() {
           // some stuff
           return 5;
    }
}

我还有一门课:

class Pqr 
{
     public int funToTest() {
            return Abc.fun();

     }
}

我正在使用 mockito 进行如下测试:

class PqrTest {
    public int testFunToTest() {
          Abc ob = Mockito.mock(Abc.class);
          Mockito.when(ob.fun()).thenReturn(12);   
    }
}

现在这样的测试工作正常。但是由于 fun() 是一个静态方法,我认为不应该通过对象调用它。 如何在不使用 mockito 调用 fun() 方法的实际实现的情况下返回 12。 我也不想通过 Abc 类的模拟对象调用 fun() ,就像我在上面所做的那样。

【问题讨论】:

  • 如果你真的想模拟一个静态方法,你可以使用 PowerMock(它扩展了 EasyMock 和 Mockito)。

标签: java unit-testing mockito


【解决方案1】:

使用PowerMock 等工具可以实现您想要实现的目标。

同时,您应该意识到,从测试的角度来看,有些代码根本就是“错误的”。如果是这种情况,那么正确的方法是更改​​代码,直到它易于测试。大多数时候,您会发现代码通过这种更改变得“更好”:错误更少、更易于理解和维护、更易于使用。

【讨论】:

  • 所以这意味着使用 mockito 是不可能的。好的。为什么你认为这段代码是错误的测试视角???。你也可以给我一些学习 Mockito 的好链接。
  • 一个测试需要能够改变所有必要的东西来模拟你希望你的代码存活的那种情况。因此,如果您有全局变量或函数(public final static)并且您需要在测试期间更改它们的行为,那么您真的应该用可以轻松交换的东西替换它们。
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2021-03-14
  • 1970-01-01
  • 2014-08-30
  • 2014-02-02
相关资源
最近更新 更多