从基类单元测试受保护属性的正确方法

问题描述

我目前正在开发一个 .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);
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...