是否可以使用Moq设置没有setter的属性?

时间:2012-03-19 16:33:41

标签: c# moq

我做了一些研究。我想使用moq并将其传递给MVC控制器,以便允许它在会话中设置一些值。我写了一些代码,看看它是否有可能“打开”一个没有setter的属性。只是不知道它是否可能......

以下代码是我试图设置一个没有setter的属性的尝试!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Moq;

namespace TestMoq
{
    class Program
    {
        static void Main(string[] args)
        {
            var mock = new Mock<TestClass>();

            mock.SetupProperty(f => f.VarWithNoSetter);

            mock.Object.VarWithNoSetter = "Set";

            Console.WriteLine(mock.Object.VarWithNoSetter);

            Console.ReadLine();
        }
    }

    public class TestClass
    {
        private string _varWithNoSetter;
        public string VarWithNoSetter
        {
            get { return _varWithNoSetter; }
        }

        public TestClass()
        {
        }
    }
}

3 个答案:

答案 0 :(得分:8)

不确定

mock.SetupGet(f => f.VarWithNoSetter).Returns("Hi, Exitos!");

答案 1 :(得分:1)

是的,你可以,但你必须将该属性虚拟化,因为Moq将生成代理

public virtual string VarWithNoSetter
{
   get { return _varWithNoSetter; }
}

或者您可以使用.SetUpGet

答案 2 :(得分:0)

对我而言,它不适用于SetUpGet,不会使属性成为虚拟。但是它可以通过使用Mock.Of&lt;&gt;:

来工作
var mock = Mock.Of<TestClass>(m=>m.VarWithNoSetter == "the value");