微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Moq模拟从属属性

如何解决用Moq模拟从属属性

| 如果我的类具有通过属性注入解决的依赖关系,是否可以使用Moq模拟该属性的行为? 例如
    public class SomeClass
     {
        //empty constructor
        public SomeClass() {}

        //dependency
        public IUsefuleService Service {get;set;}

        public bool IsThisPossible(Object someObject)
        {
           //do some stuff

           //I want to mock Service and the result of GetSomethingGood
           var result = Service.GetSomethingGood(someObject);
        }

     }
所以,SomeClass正在测试中,我试图找出是否可以用Moq模拟IUsefulService的行为,所以当我测试IsThisPossible并点击使用该服务的行时,就使用了模拟...     

解决方法

我可能会误解并简化了这个问题,但是我认为下面的代码应该可以工作。由于您拥有
Service
属性作为公共财产,因此您可以模拟
IUsefulService
,新建
SomeClass
,然后将
SomeClass
上的
Service
属性设置为模拟对象。
using System;
using NUnit.Framework;
using Moq;

namespace MyStuff
{
    [TestFixture]
    public class SomeClassTester
    {
        [Test]
        public void TestIsThisPossible()
        {
            var mockUsefulService = new Mock<IUsefulService>();
            mockUsefulService.Setup(a => a.GetSomethingGood(It.IsAny<object>()))
                .Returns((object input) => string.Format(\"Mocked something good: {0}\",input));

            var someClass = new SomeClass {Service = mockUsefulService.Object};
            Assert.AreEqual(\"Mocked something good: GOOD!\",someClass.IsThisPossible(\"GOOD!\"));
        }
    }

    public interface IUsefulService
    {
        string GetSomethingGood(object theObject);
    }

    public class SomeClass
    {
        //empty constructor
        public SomeClass() { }

        //dependency
        public IUsefulService Service { get; set; }

        public string IsThisPossible(Object someObject)
        {
            //do some stuff

            //I want to mock Service and the result of GetSomethingGood
            var result = Service.GetSomethingGood(someObject);
            return result;
        }
    }
}
希望能有所帮助。如果我想念某些东西,请告诉我,我会看看我能做什么。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?