Unittest 使用 pythonnet 模拟 .NET

问题描述

有没有办法在不存在实际 dll 的情况下模拟加载了 clr.AddReference() 的 .NET 库?

我的代码

import clr
clr.AddReference("lib/MyDeviceDriver")

import MyDeviceDriver

class MyClass:
    def __init__(self):
        self.__deviceAPI = MyDeviceDriver.Create()
.
.
.

我的单元测试代码

    def test_func(self):
        my_object = MyClass()

失败:

>       self.__deviceAPI = MyDeviceDriver.Create()
E       System.Runtime.someLibrary.COMException: Retrieving the COM class factory for component with CLSID {9F8D4F16-0F61-4A38-98B3-1F6F80F11C87} Failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

我想对 MyClass 进行单元测试,而不需要路径中的库或注册表中注册的任何类。

有没有办法做到这一点?我尝试修补各种类型的错误。我尝试修补 AddReference、MyDeviceDriver 没有成功。基本上从 python 的单元测试文档看来,“补丁”需要可用的原始库。

解决方法

既然是Python,你就不能做

import MyCode
import unittest

class DriverMock(): pass

MyCode.MyDeviceDriver = DriverMock

def test_func():
    my_object = MyClass()