免責事項を使用して、任意の一般的なパラメータで行われていなかったこと - これはHow to use FakeItEasy to assert a method was not calledがアサートコールがFakeItEasy
説明
と同じ問題ではない私は、IOCコンテナでものを登録するコードの部分を持っています私のテストでFakeItEasyを使用して、登録が確実に行われるようにすることができます。
予期しない呼び出しが行われないようにする方法を工夫しています。
クイックレポ正しいです - - 上記のテストに合格します
public class Foo
{
private readonly ICustomContainer m_CustomContainer;
public Foo(ICustomContainer customContainer)
{
m_CustomContainer = customContainer;
}
public void Bar()
{
m_CustomContainer.Register<IMyInterface, IMyImplementation>();
}
}
public interface ICustomContainer
{
void Register<TInterface, TImplementation>() where TImplementation : TInterface;
}
public class UnitTest1
{
[Fact]
public void Test1()
{
//Arrange
ICustomContainer fake = A.Fake<ICustomContainer>();
Foo objectUnderTest = new Foo(fake);
//Act
objectUnderTest.Bar();
//Assert
A.CallTo(() => fake.Register<IMyInterface, IMyImplementation>()).MustHaveHappened();
//A.CallTo(() => fake.Register<???>()).MustNotHaveHappened(); //Any generic parameter apart from <IMyInterface, IMyImplementation> must not have happened
}
}
(テストクラスのカップルに煮詰め問題は、これが本当の実装ではありません)。将来的に別の登録をBar()
に追加する予定だった場合、それはまだ通り過ぎるでしょう - 私のテストは既知のシナリオをテストするだけではあまり良くありません。
私はそう
を達成しようとしていますどのような、私のIOCコンテナですICustomContainer
のために上記で定義されたインタフェースを考えると、私は期待だけと呼ばれていることを確認したいと思います。私はすでに
は、TypeMockアイソレータなど、過去に他のモックフレームワークを使用した、私は特定の(予想される)コールが行われない限り、例外をスローするために偽のオブジェクトを設定することができ研究してきた何
。私はFakeItEasyでこれを行うことができるかどうかわかりません。また、TypeMockアイソレータは.NETコアをサポートしていないので、私には良いことではありません。
一般的なパラメータを使用しなかったメソッドがあった場合、メソッドが呼び出された回数をカウントするようにFakeItEasyを取得し、そのメソッドが呼び出されたことを期待します。期待されるコール。それは確かに選択肢ですが、私は、拡張メソッドやラッパーとして、ジェネリックパラメータではなく型パラメータを取るために私のインタフェース上にファサードを作成しなければならないことを意味します。つまり、コンパイル前の時間を失う警告私はジェネリックパラメータの制約を受ける。
実際の質問私は予想外のコールが私は.NETのコア/ FakeItEasyを使用して期待していたもの以外の任意の一般的なパラメータを持つを作っていなかったと主張することができるように私は私のテストを修正するにはどうすればよい
/xUnit?
いいえ、あなたはあまり単純化していません。私はあなたがこれを行うことができ、ちょうどそれを試したことを知らなかった、それはまさに私が探しているものに見えます。素晴らしい答え! – Jay
私は助けになってうれしいです。 –