gpt4 book ai didi

java - 如何使用 JMockit 中给定的构造函数对模拟类的特定实例进行验证?

转载 作者:行者123 更新时间:2023-11-30 05:47:57 25 4
gpt4 key购买 nike

我一直在使用 JMockit 来模拟机器人的依赖关系(例如传感器、操纵杆等)。对于我的类(class)测试之一,我需要模拟两个操纵杆对象。

在我的代码中,操纵杆的实例化如下:

Joystick joystick1 = new Joystick(0);
Joystick joystick2 = new Joystick(1);

我一直在阅读如何匹配 Instance matching section in the JMockit documentation 中对象的特定实例。 .

但是,这些步骤似乎不适用于验证(或者可能我做错了),或者它们涉及使用 @Mocked在每个测试方法的参数中添加标签,这将是一个麻烦,因为我希望这种行为适用于整个类的多个测试。

我不能简单地将模拟实例注入(inject)到测试类中,因为测试类实际上从应用程序中的另一个类接收它们,并且我不想模拟我自己的代码库来传递可注入(inject)操纵杆。

我的目标行为是这样的:

public class ClassUsingJoysticksTest {
@Injectable
private Joystick joystick1;

@Injectable
private Joystick joystick2;

@Before
public void setUp() {
new Expectations() {{
new Joystick(0);
result = joystick1;

new Joystick(1);
result = joystick2;
}};
}

@Test
public void someTest() {
ClassThatUsesJoysticks classThatUsesJoysticks = new ClassThatUsesJoysticks();
classThatUsesJoysticks.doSomething();

new Verifications() {{
joystick1.setRumble(1D);
joystick2.setRumble(2D);
}};
}
}

被测类的相关部分:

public class ClassThatUsesJoysticks {
public void doSomething() {
Joystick joystick1 = OI.getInstance().getJoystick1(); // OI is our own class.
Joystick joystick2 = OI.getInstance().getJoystick2();

joystick1.setRumble(1);
joystick2.setRumble(2);
}
}

// OI class that we used to keep track of operator interface.
public class OI {
private Joystick joystick1, joystick2;

public OI() {
joystick1 = new Joystick(0); // First joystick is always on port 0.
joystick2 = new Joystick(1); // Next joystick is port 1.
}

public Joystick getJoystick1() {
return joystick1;
}

public Joystick getJoystick2() {
return joystick2;
}
}

使用 JMockit 可以实现类似的功能吗?

如果您愿意,可以找到我试图实现的实际实现(对我自己的代码库进行了错误的模拟)here .

最佳答案

我可以使用当前设置,如 documented .

public class ClassUsingJoysticksTest {
@Mocked Joystick joystick1;
@Mocked Joystick joystick2;

@Before
public void setUp() {
new Expectations() {
new Joystick(0);
result = joystick1;

new Joystick(1);
result = joystick2;
}
}

@Test
public void testRumbles() {
classThatUsesJoysticks.doSomething();

new Verifications() {{
joystick1.setRumble(1.0);
joystick2.setRumble(1.0);
}};
}
}

如果您想查看实际的实现,代码是 here .

关于java - 如何使用 JMockit 中给定的构造函数对模拟类的特定实例进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54527331/

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