TL; DR 我似乎无法 InternalsVisibleTo 来进行单元测试
我目前正在开发一个库,在该库中,我希望在内部建立一些(但不是全部)类,以避免使用户感到困惑。只有某些类应该从该dll中公开。
我认为这是学习如何使用C#中的 internal 关键字的好项目。
每当我创建一个新项目时,我都会使用DDD的变体,将职责划分为不同的DLL,但出于这个问题,请考虑一下我的项目结构(从上到下) ):
有关该架构的工作示例,您可以在github上查看我的HelloWorld project。这个示例在这里并未重现问题,仅用于说明我通常如何分层代码。
我经常为我的单元测试创建一个基类,该基类为我正在测试的任何类型创建模拟,即以下示例:
public class TestsFor<TInstance> where TInstance : class
{
protected MoqAutoMocker<TInstance> AutoMock { get; set; }
protected TInstance Instance { get; set; }
public TestsFor()
{
AutoMock = new MoqAutoMocker<TInstance>();
RunBeforeEachUnitTest(); // virtual
Instance = AutoMock.ClassUnderTest;
RunAfterEachUnitTest(); // virtual
}
}
我编写的单元测试通常采用以下形式:
public class ReportServiceTests : TestsFor<ReportService>
{
[Fact]
public async Task CreateReport_WhenCalled_LogsTheCall()
{
// Act
await Instance.CreateReport();
// Assert
GetMockFor<ILogger>().Verify(logger => logger.Enter(Instance, nameof(Instance.CreateReport)), Times.Once());
}
}
每个单元测试将在其中派生 TestsFor
有人知道如何解决这个问题吗?
答案 0 :(得分:1)
您遇到的问题是您试图创建一个比其基类更易于访问的类。
您可以委派而不是派生:
$ ./bin/vector_2d_subset < dat/universal_sub.txt
1 2 3 4 5
1 2 3
1 2 3 4
1 2 3 4 5 6