unit-testing - Windows 应用商店应用程序单元测试 USB 设备

标签 unit-testing usb windows-store-apps mstest windows-8.1

我正在为 Windows 应用商店应用编写一个 USB 设备 API,它使用 Windows 8.1 中的 Windows.Devices.USB API 来连接自定义 USB 设备并与之通信。我正在使用 Visual Studio 2013 开发预览 IDE。 库中的以下函数用于连接 USB 设备。 (为了清晰起见,进行了简化)

public static async Task<string> ConnectUSB()
    {
        string deviceId = string.Empty;
        string result = UsbDevice.GetDeviceSelector(new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"));
        var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(result, null);
        if (myDevices.Count > 0)
        {
            deviceId = myDevices[0].Id;
        }
        UsbDevice usbDevice = null;
        try
        {
            usbDevice = await UsbDevice.FromIdAsync(deviceId);
        }
        catch (Exception)
        {
            throw;
        }
        if (usbDevice != null)
            return "Connected";
        return string.Empty;
    }

当从 Windows 应用商店应用程序项目调用时,此函数可以完美地连接到设备。但是,当从 Windows 应用商店应用程序单元测试库项目调用时,try block 中的语句会引发异常。

A method was called at an unexpected time. (Exception from HRESULT: 0x8000000E)

根据我的观察,当调用异步函数而不使用await关键字时,就会发生这种情况。但我使用的是await关键字,好吧!

更多信息,我无法使用 NUnit 为商店应用程序编写单元测试,因此我使用 MSTest 框架。

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public async Task TestMethod1()
    {
        await ConnectToUSB.ConnectUSB();
    }
}

此外,我还在两个应用商店项目的 list 文件中包含了以下功能标签,没有这些标签,商店应用程序就无法连接到设备。

<m2:DeviceCapability Name="usb">      
  <m2:Device Id="vidpid:ZZZZ XXXX">
    <m2:Function Type="name:vendorSpecific" />
  </m2:Device>
</m2:DeviceCapability>

是否有我遗漏的东西,或者这是 MSTest 框架中的错误?

最佳答案

我认为问题在于 等待 UsbDevice.FromIdAsync(deviceId); 必须在 UI 线程上调用,因为应用程序必须请求用户访问。

您必须使用 CoreDispatcher.RunAsync 来确保您位于 UI 线程上或实际上位于页面的后台代码中。

关于unit-testing - Windows 应用商店应用程序单元测试 USB 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18569924/

相关文章:

c++ - CXXTEST 编译器是否有#define _KEYWORD_ 来排除代码块?

android - 无法使用 adb (Mac OS X 10.7.5) 连接到 LG 手机

delphi - 我如何在delphi中与HID USB设备通信

string - USB设备制造商的字符串有多长?

windows - C++/CX 迭代 Map<String^, Object^>^ 的方式?

azure - 如何在 Windows 应用商店应用程序中将数据上传到 azure blob 时显示进度条

c# - 如何安装两个版本的 Metro 应用程序?

c# - 在单元测试中生成线程

python - Mox(pymox)框架的CreateMockAnything()的优缺点

c# - 断言模拟对象构造函数抛出的异常