问题描述
我目前正在开发一个 .NET 5.0 应用程序。
我需要对一个抽象基类进行单元测试,它实现了一个受保护的属性 protected IMediator Mediator
。
我的班级是这样的:
public abstract class MyControllerBase : Controller
{
protected IMediator Mediator { get; }
protected MyControllerBase(IMediator mediator)
{
Mediator = mediator;
}
}
我的单元测试如下所示:
[Fact]
[Trait(nameof(TestTraitName.Category),nameof(TestType.Unit))]
public void MyControllerTests()
{
var testController = new TestController(new Mediator(Mock.Of<ServiceFactory>()));
Assert.NotNull(anotherAuthController.TestMediator);
}
}
public class TestController : MyControllerBase
{
public IMediator TestMediator { get; set; }
public AnotherController(IMediator mediator)
: base(mediator)
{
TestMediator = mediator;
}
}
当我运行单元测试时,不幸的是我的测试没有覆盖受保护的属性。
您知道吗,从 C# 中的抽象基类对受保护的属性进行单元测试的正确方法是什么?
你知道如何解决这个问题吗?
解决方法
在这种情况下,我建议让公共财产公开基础财产
public class TestController : MyControllerBase {
public IMediator TestMediator => base.Mediator;
public TestController(IMediator mediator) : base(mediator) {
}
}
[Fact]
[Trait(nameof(TestTraitName.Category),nameof(TestType.Unit))]
public void MyControllerTests() {
var testController = new TestController(Mock.Of<IMediator>());
Assert.NotNull(testController.TestMediator);
}