【发布时间】:2014-08-25 07:07:07
【问题描述】:
我是 NSubstitute 的新手,并试图伪造一个名为 OrgDataWS 的现有类。这个类有一个名为GetDataSet的方法:
public XmlElement GetDataSet(int token)
{
string perfLogMessage = string.Format("Org.GetDataSet: {0}", Guid.NewGuid().ToString());
MultiMessagePerformanceCounter performanceCounter = MultiMessagePerformanceCounter.StartNew(perfLogMessage);
XmlElement result = orgDataManager.GetDataSet(token);
performanceCounter.Stop();
return result;
}
以下是我的测试方法:
[TestMethod]
public void GetDataSetTest()
{
var dataWSStub = Substitute.For<OrgDataWS>();
var orgManagerStub = Substitute.For<OrgDataManager>();
var document = new XmlDocument();
var xmlElement = document.CreateElement("a");
orgManagerStub.GetDataSet(Arg.Any<int>()).Returns<XmlElement>(xmlElement);
dataWSStub.OrgDataManager = orgManagerStub;
var result = dataWSStub.GetDataSet(99);
}
但是,当我运行我的测试方法时,这一行
orgManagerStub.GetDataSet(Arg.Any<int>()).Returns<XmlElement>(xmlElement);
抛出异常。这个异常来自OrgDataManager 类的实现,据我了解,这不应该发生。使用该子句的目的是我希望如果使用任何Int 参数调用orgManagerStub 的DataDataSet 方法,只需返回我的xmlElement 实例。我不希望我的代码运行OrgDataManager 的详细实现。
我的测试代码有什么问题?如何解决?
【问题讨论】:
-
我不认为你可以替代具体的类型,至少方法需要是虚拟的。
标签: c# unit-testing nsubstitute