我从 .NET 世界(C#)转向 Java(Android 开发)。
.NET 领域的许多模拟框架和工具允许替换/覆盖类/方法的使用,而无需将任何模拟对象注入测试方法(Microsoft Fakes就是其中之一)。
例如,在以下方法中:
public void SomeMethod()
{
new SomeOtherClass().Do("This is a test!");
}
调用SomeOtherClass().Do方法可以返回一个特定的值或以某种方式运行,即使我没有为这个类注入一个模拟对象到这个方法中。
以Microsoft Fakes为例,这可以通过与此类似的代码来完成:
using (ShimsContext.Create())
{
// decide what to do when Do() gets called
System.Fakes.ShimSomeOtherClass.Do = str => ....
new SomeOtherClass().Do("blabla");
}
据我在 Java/Android 模拟世界中所见,做这样的事情是不可能的。我将不得不重构我的所有代码来为每个方法注入它的依赖项。
虽然这在某些地方确实是一种很好的做法,但不可能在所有代码位置都这样做。
有没有办法用Java实现这一点?
我正在使用的框架:Mockito、PowerMock、Robolectric