【发布时间】:2015-10-03 12:25:27
【问题描述】:
我的工作方法,需要测试:
using TCatSysManagerLib; // for TcSysManager
public static int ProcessPositionBias(TcSysManager tcsm)
{
// method body here
return 0;
}
现在在测试单元中我尝试模拟 TcSysManager,因为它适用于硬件,在测试期间不可用,我什至无法使用它:
namespace TestClient
{
[TestClass]
public class UnitTestClient
{
[TestMethod]
public void TestVersion()
{
Mock<TcSysManager> tcsm = new Mock<TcSysManager>();
int r = ClientProgram.ProcessPositionBias(tcsm.Object); // errors here
}
}
public TcSysManager
{
// I promise to implement some methods which I use in my app
}
}
编译器基本上抱怨 3 件事:
错误 1 类型“TCatSysManagerLib.TcSysManager”在 未引用的程序集。您必须添加对程序集的引用 'Interop.TCatSysManagerLib,版本=1.1.0.0,文化=中性, PublicKeyToken=null'。
错误 2 最好的重载方法匹配 'Client.ClientProgram.ProcessPositionBias(TCatSysManagerLib.TcSysManager)' 有一些无效 论据
错误 3 参数 1:无法从 'TestClient.TcSysManager' 转换为 'TCatSysManagerLib.TcSysManager'
【问题讨论】:
-
你有什么问题?
-
“您必须添加对程序集 'Interop.TCatSysManagerLib, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null' 的引用。” ?
-
对于单元测试我不能这样做,因为该库仅在“特殊计算机”上可用。
-
据我所知,您唯一真正的选择是创建一个与“特殊库”具有相同名称空间和版本的模拟库,并在本地测试中引用它,假设它不是t签名或任何东西。否则我看不出有什么东西可以建造。
标签: c# unit-testing moq