问题描述
有没有办法在不存在实际 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()