如何让测试用例忽略 xUnit 中的构造函数?

How to make a test case ignore the constructor in xUnit?

我有一个使用内存数据库的测试 class。所以在构造函数中我们创建了数据库上下文并将其传递给服务构造函数,这样我们就可以在每个测试用例中使用这个服务实例:

private readonly IService _service;
private readonly Context _context;

public MyTestClass() {
    _context = CreateContext();
    _service = new Service(_context);
}

但是,我想忽略一个特定测试用例中的构造函数设置,以便我可以按照我需要的方式填充上下文,并使用最近为该特定测试用例创建的上下文实例化服务。可能吗?

no proper way to get a TestContext that would let you know which test it's for within the constructor.

你能做的最好的事情是将另一个测试 Class 放在旁边(甚至可以在同一个文件中),它包含需要不同行为的单个测试。

或者,如果您将 _service 更改为 Lazy<IService> 并在每次测试开始时执行 _service=new Lazy<IService>(() => new Service(CreateContext())), then you can have all but one test trigger the initialization with var service = service.Value`。