簡體   English   中英

使用Moq模擬要測試的對象的依賴關系時出現類型錯誤

[英]Type error when using Moq to mock dependency for object being tested

我有一個驗證類,我正在嘗試測試FluentQuestionAnswerValidator ,但是此類具有依賴項IQuestionAnswerRepository ,必須將其通過構造函數傳遞才能實例化驗證器類。

為了嘗試實例化該類,我使用Moq來模擬存儲庫,然后可以將其傳遞給驗證器。

但是,當我嘗試在實例化實例庫時將模擬的存儲庫傳遞到驗證器時,出現類型錯誤:

Error   CS1503  Argument 2: cannot convert from 
'Moq.Mock<IQuestionAnswerRepository>' to 'IQuestionAnswerRepository'    

如何更改已有的代碼,以使其接受模擬的存儲庫作為其依賴項?

class QuestionAnswerValidationTest
    {
        private QuestionAnswer _qaTest;
        private FluentQuestionAnswerValidator _validator;
        private Mock<IQuestionAnswerRepository> mockRepo;

        [SetUp]
        public void Setup()
        {
            _qaTest = new QuestionAnswer()
            {
                Id = 2,
                Type = "Number",
                Required = true,
                QuestionSection = 1,
            };

            QuestionAnswer qa = new QuestionAnswer()
            {
                Id = 1,
                Type = "String",
                Required = true,
                QuestionSection = 1,
                Answer = "Yes",
                ConditionalQuestionId = null,
                ConditionalQuestionAnswered = null
            };

            Dictionary<int, QuestionAnswer> questionMap = new Dictionary<int, QuestionAnswer>();
            questionMap.Add(qa.Id, qa);

            mockRepo = new Mock<IQuestionAnswerRepository>(MockBehavior.Strict);
            mockRepo.Setup(p => p.QuestionMap).Returns(questionMap);
        }

        [Test]
        public void Validate_AnswerDoesNotMatchQuestionType_ProducesValidationError()
        {
            _qaTest.Answer = "string";

            _validator = new FluentQuestionAnswerValidator(_qaTest, mockRepo);
        }
    }

您的FluentQuestionAnswerValidator顯然希望使用IQuestionAnswerRepository實例,而不是Mock<IQuestionAnswerRepository>實例。 由於這兩者之間沒有隱式轉換,因此會出現錯誤。

因此,您實際上想要提供的不是模擬本身,而是由框架創建的實例 所以改用這個:

_validator = new FluentQuestionAnswerValidator(_qaTest, mockRepo.Object);

暫無
暫無

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

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