我们可以模拟第三方对象创建或调用吗?

时间:2015-06-11 10:42:43

标签: java unit-testing mocking mockito

例如,我有以下处理程序:

@Component
public class MyHandler {

  @AutoWired
  private MyDependency myDependency;

  public void someMethod(Object parameter) {
    ...
    ThirdPartyClass thirdPartyObject = new ThirdPartyClass(parameter);
    thirdPartyObject.unnecessaryMethod();
    ...
  }
}

为了测试这个,我想写这样的东西:

@RunWith(MockitoJUnitRunner.class}
class MyHandlerTest {

  @InjectMocks
  MyHandler myHandler;

  @Mock
  MyDependency myDependency;

  @Test
  public void testSomeMethod() {
    ...
    myHandler.someMethor(parameter);
    ...
  }
}

我想避免打电话给unnecessaryMethod()。有没有办法做到这一点?

如果unnecessaryMethod()是静态的,那么我可以使用PowerMockito进行模拟,但PowerMockito可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

我找到了答案:

int[][] bmpData = new int[10][5];
for(int x = 0; x < 10; x++) {
    for(int y = 0; y < 5; y++) {
        bmpData[x][y] = 127 | 127 << 8 | 127 << 16;
    }
}
new BMP().saveBMP("test.bmp", bmpData);

一些Utils类:

Bitmap

测试班:

public class MyHandler {
    public void someMethod() {
        Utils utils = new Utils(10);
        System.out.println("Should be 1 : " + utils.someMethod());
    }
}

控制台输出将是: public class Utils { private int value = 5; Utils () { System.out.println("Should be mocked"); } Utils (int param) { this.value = param; System.out.println("Should be mocked"); } public int someMethod() { System.out.println("Should be mocked"); return value; } }

Related question

答案 1 :(得分:0)

使用工厂实例化ThirdPartyClass可能更好吗? 在测试中你可以模拟这个工厂以避免调用方法