gpt4 book ai didi

c# - 模拟 Java 中的任何类使用(特别是在 Android 中)

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:33 25 4
gpt4 key购买 nike

我正从 .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()

使用 PowerMock 模拟新对象的实例化

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com