我有IAudioProcessor
一个单一方法的接口IEnumerable<Sample> Process(IEnumerable<Sample> samples)
。虽然这不是接口本身的要求,但我想确保我的所有实现都遵循一些通用规则,例如:
- 使用延迟执行
- 不要更改输入样本
为这些创建测试并不难,但我必须为每个实现复制和粘贴这些测试。我想避免这种情况。
我想做这样的事情(注意属性GenericTest
和类型参数):
[GenericTest(typeof(AudioProcessorImpl1Factory))]
[GenericTest(typeof(AudioProcessorImpl2Factory))]
[GenericTest(typeof(AudioProcessorImpl3Factory))]
public class when_processed_audio_is_returned<TSutFactory>
where TSutFactory : ISutFactory<IAudioProcessor>, new()
{
static IAudioProcessor Sut = new TSutFactory().CreateSut();
protected static Context _ = new Context();
Establish context = () => _.Original = Substitute.For<IEnumerable<ISample>>();
Because of = () => Sut.Process(_.Original);
It should_not_have_enumerated_the_original_samples = () =>
{
_.Original.DidNotReceive().GetEnumerator();
((IEnumerable)_.Original).DidNotReceive().GetEnumerator();
};
}
这样的事情可能吗?