内部 class 可以访问外部 class 数据的 xUnit 测试套件
xUnit test suite where inner class can access outer class' data
我有一些大型测试套件,所以我将它们分成 inner/nested class 个部分。这也使 VSCode 测试浏览器中的结果更加友好。
但是当在外部 class:
中定义了公共夹具数据时,它就不能正常工作了
public class UserTests
{
// common fixture data used by all inner classes
public UserTests() => _fake = new Fake();
private readonly Fake _fake;
public class AddUser {
public AddUser(UserTests o) => _outer = o;
private readonly UserTests _outer;
[Fact]
public void test_foo() {
// use _outer._fake
}
[Fact]
public void test_bar() {
// use _base._fake
}
}
public class FindUser
{
// ...similar to above
}
public class DeleteUser {
// ...similar to above
}
}
但是我得到这个错误:
The following constructor parameters did not have matching fixture data: UserTests o
所以上面的设置可能不好。
有什么好的设置可以让我嵌套 classes 并在外部 class 中创建夹具数据,以便所有内部 classes 都可以使用它?
正如@Fabio 在上面的评论中所解释的,测试运行器不知道如何实例化测试 classes。
所以诀窍是在内部 class' 构造函数中调用 _outer = new UserTests()
。
我有一些大型测试套件,所以我将它们分成 inner/nested class 个部分。这也使 VSCode 测试浏览器中的结果更加友好。
但是当在外部 class:
中定义了公共夹具数据时,它就不能正常工作了public class UserTests
{
// common fixture data used by all inner classes
public UserTests() => _fake = new Fake();
private readonly Fake _fake;
public class AddUser {
public AddUser(UserTests o) => _outer = o;
private readonly UserTests _outer;
[Fact]
public void test_foo() {
// use _outer._fake
}
[Fact]
public void test_bar() {
// use _base._fake
}
}
public class FindUser
{
// ...similar to above
}
public class DeleteUser {
// ...similar to above
}
}
但是我得到这个错误:
The following constructor parameters did not have matching fixture data: UserTests o
所以上面的设置可能不好。
有什么好的设置可以让我嵌套 classes 并在外部 class 中创建夹具数据,以便所有内部 classes 都可以使用它?
正如@Fabio 在上面的评论中所解释的,测试运行器不知道如何实例化测试 classes。
所以诀窍是在内部 class' 构造函数中调用 _outer = new UserTests()
。