gpt4 book ai didi

java - Java/Android 中方法调用后测试参数值

转载 作者:行者123 更新时间:2023-12-01 09:27:42 26 4
gpt4 key购买 nike

我有一个通过 BLE 连接到外围设备的应用程序。外围设备被设置为接受来自设备的特定命令集。

这是一个极其简单的示例,说明了所发生的情况

在命令类中..

public void sendCommand(int what) {
switch(what) {
case 0:
ble.writeToDevice("PowerOnCmd");
break;
case 1:
ble.writeToDevice("PowerOffCmd");
break;
}
}

在“ble”类中

public void writeToDevice(String command) {
//sets characteristic value
//and writes it
}

我希望能够测试对 sendCommand(1) 的调用是否会导致 writeToDevice 收到有效且正确的命令。

在我的例子中,这似乎非常有用,可以确保对命令类的所有更改仍然发送外围设备可以正确读取的命令。

有一个 .NET 库可以完全满足我的需求 http://nsubstitute.github.io/help/received-calls/我很好奇使用 JUnit 和/或任何其他 Android 测试库来做到这一点的方法。

我目前正在尝试 Mockito,但会对任何我能够使用的库开放。

最佳答案

只要您可以替换 ble 字段,您就可以在 Mockito 中轻松完成此操作。我在下面使用构造函数参数完成了此操作,但您也可以使用 setter 或字段来完成此操作。您还可以选择具有有限可见性的构造函数/ setter /字段,以便您可以替换测试中的依赖项,但在生产中使用硬编码的默认依赖项。 (请注意,在静态或 final方法调用的情况下,例如 Android 库类或不可更改的静态库,您需要编写包装类或使用更具侵入性的测试库; PowerMockRobolectric 浮现在脑海中。)

您的测试大致如下所示:

// Create a Mockito mock, which is an automatic subclass with
// all of its methods overridden to track and verify every method call.
BleService mockBleService = Mockito.mock(BleService.class);

// Importantly, you need to make sure that your system under test calls this
// new object instead of the default (real) dependency.
Command commandUnderTest = new Command(mockBleService);

// Now you interact with your Command exactly like you'd expect consumers to.
commandUnderTest.sendCommand(0);

// Using the static method Mockito.verify, you can confirm the call came through.
verify(mockBleService).writeToDevice("PowerOnCmd");

熟悉后,请阅读 Mockito documentation ,特别是顶级部分 1(验证)、2( stub )和 9(@Mock 注释)。

关于java - Java/Android 中方法调用后测试参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39707137/

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