gpt4 book ai didi

c# - 使用 Moq 模拟依赖属性

转载 作者:太空狗 更新时间:2023-10-29 23:03:05 25 4
gpt4 key购买 nike

如果我有一个类具有通过属性注入(inject)解析的依赖项,是否可以使用 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 属性作为公共(public)属性,您可以模拟 IUsefulService,新建 SomeClass,然后设置 Service SomeClass 上的 属性添加到您的模拟中。

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;
}
}
}

希望对您有所帮助。如果我遗漏了什么,请告诉我,我会尽力而为。

关于c# - 使用 Moq 模拟依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com