我们目前使用Mockito+PowerMock作为我们的主要模仿框架,并且在开始将一些代码转移到Java8时遇到了一些问题。因此,我们决定将jMockit作为一种替代方案进行评估。我对嘲笑概念有相当好的理解,但我承认我对jMockit的经验非常有限。
然而,我在测试一些在我看来应该是非常基本的东西时遇到了问题:被测试的类在其构造函数中使用New创建其他类的实例。我想让这个新调用返回一个模拟实例。
import mockit.Expectations;
import mockit.Injectable;
import mockit.Mocked;
import org.testng.annotations.Test;
public class ClassUnderTestTest {
interface SomeService {
void doWork();
}
class ClassUnderTest {
private final SomeService service;
public ClassUnderTest() {
this.service = new SomeService() {
@Override
public void doWork() {
}
};
}
}
@Injectable
private SomeService mockService;
@Test
public void shouldBeAbleToMaskVariousNumbers() throws Exception {
new Expectations() {{
new ClassUnderTest();
result = mockService;
}};
}
}
java.lang.IllegalStateException: Missing invocation to mocked type at this point;
please make sure such invocations appear only after the declaration of a suitable
mock field or parameter
使用jMockit很容易做到这一点:
public class ClassUnderTestTest {
interface SomeService { int doWork(); }
class ClassUnderTest {
private final SomeService service;
ClassUnderTest() {
service = new SomeService() {
@Override public int doWork() { return -1; }
};
}
int useTheService() { return service.doWork(); }
}
// This annotation is a variation on @Mocked, which extends
// mocking to any implementation classes or subclasses of
// the mocked base type.
@Capturing SomeService mockService;
@Test
public void shouldBeAbleToMaskVariousNumbers() {
new Expectations() {{ mockService.doWork(); result = 123; }};
int n = new ClassUnderTest().useTheService();
assertEquals(123, n);
}
}
问题内容: 我想模拟默认构造函数,以便它不构造表示其创建时间的对象,而始终构造相同的对象(在我的示例中,2010年12月31日以下)。我尝试使用和进行此操作,但是在执行下面的测试时,输出始终为。那么我的嘲笑怎么了? 问题答案: al nik的回答对我来说是一个很好的暗示。最好模拟类而不是类以产生假时间。最后,我自己的解决方案只是模拟该方法(此方法在内部被调用)。 JMockit 1.5及更高版本
问题内容: 我正在尝试第一次使用PowerMockito模拟类构造函数,但是它不起作用。我当前的代码是: 测试失败,因为返回的值为“ Fail”。我的问题在哪里? 问题答案: Okey,找到答案了,您需要致电 代替
问题内容: 这个问题已经在这里有了答案 : java“ void”和“ non void”构造函数 (4个答案) 10个月前关闭。 问题答案: 您定义的实际上不是构造函数,而是称为的方法。如果您将代码更改为如下所示,则可以正常运行: 如果未明确定义任何特定的构造函数,则编译器会自动创建一个无参数的构造函数。
问题内容: 如果我在构造函数中返回一些值或对象,那么var会得到什么? 在两种情况下都会得到什么n? 其实这是一个测验问题,答案是什么? 自定义对象构造函数返回什么? a)新实例化的对象 b)未定义-构造函数不返回值 c)不论return语句是 d)等于return语句是什么;新实例化的对象(如果没有return语句) 问题答案: 我发现了这个很棒的链接: 上面提到的第二点魔术是构造函数返回特定的
问题内容: 我有这个代码。对象构造函数是否有可能以某种方式失败,从而为它分配了一个值,并在构造函数返回后释放了该对象? 问题答案: 假设您使用的是PHP 5,则可以在构造函数中引发异常: 为了清楚起见,您可以将其包装在静态工厂方法中: 顺便说一句,某些版本的PHP 4允许您在构造函数中将$ this设置为NULL,但我认为这从未得到正式批准,并且最终删除了“功能”。
我找到了一些很好的SO链接(如何从异步回调函数返回值?以及从node.js中的回调函数返回值等),但它们并不是不能为我的问题提供解决方案。 我的问题:能够得到异步调用的结果,但我如何使用这个结果返回我的函数? 这里获取callBackResponse的值为true或false,并希望将该值用作: