簡體   English   中英

是否可以使用Moq設置沒有setter的屬性?

[英]Is it possible to set a property with no setter using 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()
        {
        }
    }
}

當然:

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

是的,你可以,但你必須使該屬性虛擬,因為Moq將生成代理

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

或者您可以使用.SetUpGet

對我來說,它不適用於SetUpGet,不會使屬性成為虛擬。 但它通過使用Mock.Of <>工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM