- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正从 .NET 世界 (C#) 转向 Java(Android 开发)。
许多来自 .NET 空间的模拟框架和工具允许替换/覆盖类/方法的使用,而无需将任何模拟对象注入(inject)测试方法(Microsoft Fakes 就是其中之一)。
例如,在下面的方法中:
public void SomeMethod()
{
new SomeOtherClass().Do("This is a test!");
}
调用 SomeOtherClass().Do 方法可以返回一个特定的值或以某种方式运行,即使我没有为这个类注入(inject)一个模拟对象到这个方法中。
例如,使用 Microsoft Fakes,这可以通过类似于以下的代码来完成:
using (ShimsContext.Create())
{
// decide what to do when Do() gets called
System.Fakes.ShimSomeOtherClass.Do = str => ....
new SomeOtherClass().Do("blabla");
}
就我在 Java/Android 模拟世界中所见,做那样的事情是不可能的。我将不得不重构我的所有代码,以便为每个方法注入(inject)它的依赖项。
虽然这在某些地方确实是一个很好的做法,但不可能在所有代码位置都这样做。
有什么方法可以用 Java 实现吗?
我正在使用的框架:Mockito、PowerMock、Robolectric
最佳答案
您可以使用 expectNew()
http://code.google.com/p/powermock/wiki/MockConstructor
SomeOtherClass someOtherMock = createMock(SomeOtherClass.class);
expectNew(SomeOtherClass.class).andReturn(someOtherMock);
expect(someOtherMock.do("blabla")).andReturn(...);
编辑:您可以将 Mockito 与 PowerMockito 扩展一起使用
http://code.google.com/p/powermock/wiki/MockitoUsage
PowerMockito.whenNew(SomeOtherClass.class)...
关于c# - 模拟 Java 中的任何类使用(特别是在 Android 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360442/
我已经可以在其中输入一些附加文本了mydomain/wiki/Special:UserLogin。我添加了一句话: In order to apply for an account send an m
有人可以解释以下脚本输出背后的逻辑吗? import numpy if(numpy.dtype(numpy.float64) == None): print "Surprise!!!!" 谢谢
是我还是 gmail bulls**t?在 outlook/浏览器上,我的电子邮件是完美的,但在 gmail 上,2 个表之间有一个空间,为什么?!?图片:http://i.imgur.com/srJ
我是一名优秀的程序员,十分优秀!