首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有在mock上执行调用,这会有什么问题呢?

没有在mock上执行调用,这会有什么问题呢?
EN

Stack Overflow用户
提问于 2010-11-10 18:56:12
回答 1查看 1.1K关注 0票数 0

通过下面的测试可以消除这个错误。如果我测试DataLayer,数据库就会更新,一切都会正常工作。然而,mock一直在发送这个错误。我有一个类似的测试,可以使用几乎完全相同的代码(在InsertRPAData上)。我能看到的唯一区别是,与Verify相比,XMLDataEntity是测试中的不同实体,但它们都使用条形码=1。

这个测试需要工作,XMLDataEntity就在那里,让我可以验证测试。现在也忽略返回值。

代码语言:javascript
复制
[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));
}

被调用的方法是这个方法。

代码语言:javascript
复制
   public Int32 DoSuppressions(Stream reader, RPADataEntity rpa)
   {
       XMLDataEntity test = new XMLDataEntity();
       test.barcode = 1;

       _IRPADataLayer.UploadPreprocData(rpa, test);

       return 1;
   }

界面是这样的

代码语言:javascript
复制
public interface IRPADataLayer
{
    void InsertPreProcData(PreProcDataEntity PreProcDataEntity);
    void InsertRpaData(RPADataEntity RPADataEntity);

    RPATypeEntity GetRPAType(String type);

    void UploadPreprocData(RPADataEntity rpa, XMLDataEntity xml);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-10 19:17:47

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

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

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

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

希望这能有所帮助。

编辑:在Moq中,验证和排除给定类型的任何参数都是通过使用以下命令完成的:

代码语言:javascript
复制
It.IsAny<T>()

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

在您的情况下,这可以像这样完成:

代码语言:javascript
复制
_mockRepository.Verify(x => x.UploadPreprocData(rpa, It.IsAny<XMLDataEntity>()));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4143708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档