此错误由以下TEST转发。如果我测试DataLayer,数据库会更新,一切正常。但是模拟不断发出此错误。我有一个类似的测试,可以使用几乎确切的代码(在InsertRPAData上)。我能看到的唯一差异是,与验证相比,XMLDataEntity在测试中是一个不同的实体,但它们都使用条形码= 1。
需要对此测试进行处理,并且XMLDataEntity就在那里,以便让我能够完成测试。现在也忽略了回报。
[TestInitialize]
public void TestInitialize()
{
_mockRepository = new Mock<IRPADataLayer>();
UnityUtil.UnityContainer = new UnityContainer();
UnityUtil.UnityContainer.RegisterInstance(typeof(IRPADataLayer), _mockRepository.Object);
}
[TestMethod]
public void TestDoSuppressions()
{
//Arange
var suppressiontest = new Suppression();
//Import the XML File
XElement newElement = XElement.Parse(get090XML());
XDocument testdoc = new XDocument();
testdoc.Add(newElement);
String string2Stream = String.Concat("1");
Stream reader = new MemoryStream(ASCIIEncoding.Default.GetBytes(string2Stream));
RPADataEntity rpa = new RPADataEntity();
XMLDataEntity test = new XMLDataEntity();
test.barcode = 1;
rpa.RPAID = 1;
rpa.XMLData = testdoc;
//Act
Int32 success = suppressiontest.DoSuppressions(reader, rpa);
//Assert
_mockRepository.Verify(x => x.UploadPreprocData(rpa, test));
}
被调用的方法就是这个。
public Int32 DoSuppressions(Stream reader, RPADataEntity rpa)
{
XMLDataEntity test = new XMLDataEntity();
test.barcode = 1;
_IRPADataLayer.UploadPreprocData(rpa, test);
return 1;
}
,界面就是这个
public interface IRPADataLayer
{
void InsertPreProcData(PreProcDataEntity PreProcDataEntity);
void InsertRpaData(RPADataEntity RPADataEntity);
RPATypeEntity GetRPAType(String type);
void UploadPreprocData(RPADataEntity rpa, XMLDataEntity xml);
}
答案 0 :(得分:2)
您的验证需要XMLDataEntity
的某个实例(您在测试中实例化的实例)。
但是,正在测试的方法会创建它自己的XMLDataEntity
并调用UploadPreprocData。
因此验证失败,因为尚未使用预期的XMLDataEntity
实例调用该方法。
大多数模拟框架提供了一种方法来指定预期参数可以是任何实例,因此这可能是您想要的。
希望有所帮助。
修改强> 在Moq中,使用以下命令验证和排除给定类型的任何参数:
It.IsAny<T>()
其中T是预期实例的类型。
在你的情况下,这可以这样做:
_mockRepository.Verify(x => x.UploadPreprocData(rpa, It.IsAny<XMLDataEntity>()));