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();
};
}
このようなことは可能ですか?