没有在模拟上执行调用,这里可能有什么问题?

时间:2010-11-10 10:56:12

标签: c# interface tdd moq

此错误由以下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);
}

1 个答案:

答案 0 :(得分:2)

您的验证需要XMLDataEntity的某个实例(您在测试中实例化的实例)。

但是,正在测试的方法会创建它自己的XMLDataEntity并调用UploadPreprocData。

因此验证失败,因为尚未使用预期的XMLDataEntity实例调用该方法。

大多数模拟框架提供了一种方法来指定预期参数可以是任何实例,因此这可能是您想要的。

希望有所帮助。

修改 在Moq中,使用以下命令验证和排除给定类型的任何参数:

It.IsAny<T>()

其中T是预期实例的类型。

在你的情况下,这可以这样做:

_mockRepository.Verify(x => x.UploadPreprocData(rpa, It.IsAny<XMLDataEntity>()));