使用Moq模拟一个依赖属性

6
如果我有一个类,它具有通过属性注入解决的依赖项,那么是否可以使用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时,使用服务的那一行将使用模拟...

1个回答

8

可能我对问题有些误解和过于简单化,但我认为以下代码应该可以工作。由于您将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;
        }
    }
}

希望这有所帮助。如果我漏掉了什么,请告诉我,我会尽力解决。

谢谢!这个可行。我是Moq的新手,一直找不到一个简单的例子来入门。 - jparram
很酷,很高兴它对你有用。Moq Quickstart也有一些不错的例子。http://code.google.com/p/moq/wiki/QuickStart - rsbarro
@rsbarro 如果服务受到保护怎么办?有什么想法吗? - Gazdallah Amira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接