我有一个包含一堆类和方法的 dll,它是可执行文件的一部分。
该dll将包含以下内容
public class MyDep: IMyDep
{
public void aMethod() {return;}
}
public class MyClass : IMyClass
{
public IMyDep Dep = new MyDep();
}
现在,从另一个解决方案中,我将运行 MyApp.exe,它将加载 dll 作为其依赖项之一。
在运行它之前,我想定义一个模拟
MyDep
类并将其注入到原始 dll 中。
理想情况下,我想完全用 C# 编写此过程并使其自动化。
实现这一目标的最佳方法是什么?
我决定使用编译器符号,而不是创建一个新的解决方案,至少我不会在项目中拥有太多解决方案。
我将
MyDep
更改为
public class MyDep: IMyDep
{
#if APPIUM
public void aMethod() {
runMockCode();
return;
}
#else
public void aMethod() {
runProductionCode();
return;
}
#endif
}
我将使用
donet build -p:APPIUM=true
编译它以进行 APPIUM 测试
看起来唯一简单的解决方案是将
MyDep
隔离到一个单独的项目中并将其添加为主项目的引用,这样它将编译为独立的 dll,其中只包含我需要模拟的内容。
然后我创建另一个项目,它是我想要模拟的项目的副本,并修改了我需要模拟的方法。
注意。输出 dll 必须使用与原始 dll 相同的名称进行编译。 在 VS -> 项目属性 -> 应用程序 -> 程序集名称
我需要这个来模拟一些使用 appium 与硬件通信进行 UI 测试的代码。
在启动 appium 之前,我将项目编译到测试文件夹中,然后用模拟 dll 替换 dll。