通过下面的测试可以消除这个错误。如果我测试DataLayer,数据库就会更新,一切都会正常工作。然而,mock一直在发送这个错误。我有一个类似的测试,可以使用几乎完全相同的代码(在InsertRPAData上)。我能看到的唯一区别是,与Verify相比,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);
}发布于 2010-11-10 19:17:47
您的验证需要XMLDataEntity的某个实例(即您在测试中实例化的实例)。
但是,被测试的方法会创建自己的XMLDataEntity并调用UploadPreprocData。
因此,验证失败是因为没有使用预期的XMLDataEntity实例调用该方法。
大多数模拟框架提供了一种方法来指定期望的参数可以是任何实例的参数,所以这可能是您在这里想要的。
希望这能有所帮助。
编辑:在Moq中,验证和排除给定类型的任何参数都是通过使用以下命令完成的:
It.IsAny<T>()其中T是预期实例的类型。
在您的情况下,这可以像这样完成:
_mockRepository.Verify(x => x.UploadPreprocData(rpa, It.IsAny<XMLDataEntity>()));https://stackoverflow.com/questions/4143708
复制相似问题