多个夹具实例
Multiple fixture instances
我有一组单元测试,使用夹具 class 来存储 shared context:
public class MSAccessFixture : IDisposable {
// ...
}
public class MSAccess : IClassFixture<MSAccessFixture> {
public MSAccess(MSAccessFixture fixture) {
// ...
}
夹具的其中一个字段 class 可以有两个不同的值。
我怎样才能 运行 给定测试中的同一组测试 class 针对夹具的任一实例?
AFAICT,目前无法从灯具外部控制给定灯具实例的值应该是什么 class。因此,唯一的方法就是实现类型层次结构:
BaseFixture
DerivedFixture1
DerivedFixture2
其中每个派生夹具都有不同的值。
(这也意味着测试的类型层次结构 class,如前所述 here)。
喜欢so:
public class MSAccessFixtureBase {
public MSAccessFixtureBase(bool sharedConnection) {
// ...
}
}
public class MSAccessFixture : MSAccessFixtureBase {
public MSAccessFixture() : base(false) { }
}
public class MSAccessFixture1Connection : MSAccessFixtureBase {
public MSAccessFixture1Connection() : base(true) { }
}
public abstract class MSAccessBase {
private MSAccessFixtureBase fixture;
public MSAccessBase(MSAccessFixtureBase fixture) {
this.fixture = fixture;
// ...
}
}
public class MSAccess : MSAccessBase, IClassFixture<MSAccessFixture> {
public MSAccess(MSAccessFixture fixture) : base(fixture) { }
}
public class MSAccess1Connection : MSAccessBase, IClassFixture<MSAccessFixture1Connection> {
public MSAccess1Connection(MSAccessFixture1Connection fixture) : base(fixture) { }
}
我有一组单元测试,使用夹具 class 来存储 shared context:
public class MSAccessFixture : IDisposable {
// ...
}
public class MSAccess : IClassFixture<MSAccessFixture> {
public MSAccess(MSAccessFixture fixture) {
// ...
}
夹具的其中一个字段 class 可以有两个不同的值。
我怎样才能 运行 给定测试中的同一组测试 class 针对夹具的任一实例?
AFAICT,目前无法从灯具外部控制给定灯具实例的值应该是什么 class。因此,唯一的方法就是实现类型层次结构:
BaseFixture
DerivedFixture1
DerivedFixture2
其中每个派生夹具都有不同的值。
(这也意味着测试的类型层次结构 class,如前所述 here)。
喜欢so:
public class MSAccessFixtureBase {
public MSAccessFixtureBase(bool sharedConnection) {
// ...
}
}
public class MSAccessFixture : MSAccessFixtureBase {
public MSAccessFixture() : base(false) { }
}
public class MSAccessFixture1Connection : MSAccessFixtureBase {
public MSAccessFixture1Connection() : base(true) { }
}
public abstract class MSAccessBase {
private MSAccessFixtureBase fixture;
public MSAccessBase(MSAccessFixtureBase fixture) {
this.fixture = fixture;
// ...
}
}
public class MSAccess : MSAccessBase, IClassFixture<MSAccessFixture> {
public MSAccess(MSAccessFixture fixture) : base(fixture) { }
}
public class MSAccess1Connection : MSAccessBase, IClassFixture<MSAccessFixture1Connection> {
public MSAccess1Connection(MSAccessFixture1Connection fixture) : base(fixture) { }
}