模擬オブジェクトの期待値は、慣習や例を使って設定できますか?MoQ +慣習によるSetUp
I.e.
これに代わる方法がありますか、これを達成するためにソースを変更する必要はありますか?あるいはこれを行うことができるライブラリがありますか?
模擬オブジェクトの期待値は、慣習や例を使って設定できますか?MoQ +慣習によるSetUp
I.e.
これに代わる方法がありますか、これを達成するためにソースを変更する必要はありますか?あるいはこれを行うことができるライブラリがありますか?
あなたはMoqでこれを行うことはできません。私はこれを行うことができるライブラリについては気づきません。
AssemblyInitialize
の式でIt.Is(..)
式を使用して一連の表記規則を定義し、テストセットアップ中に使用することができます。
また、いくつかのヘルパーメソッドを定義することも簡単です。たとえば、ItExt.IsConventional<T>()
メソッドを使用してIt.IsAny<T>()
の構文をミラー化することができます。ここで可能な実装です:
public static class ItExt
{
private static readonly Dictionary<Type, object> RegisteredConventions = new Dictionary<Type, object>();
public static void RegisterConvention<T>(Func<T> convention)
{
RegisteredConventions.Add(typeof(T), convention);
}
public static T IsConventional<T>()
{
Func<T> conventionFunc = (Func<T>)RegisteredConventions[typeof(T)];
return conventionFunc();
}
}
と使用方法:Mock<T>.Setup
コール内部評価のために利用可能な中での発現のように、規則の定義は、Func<T>
として保存しなければならないことを
[TestClass]
public class FooTests
{
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
ItExt.RegisterConvention(() => It.Is<int?>(n => n.HasValue));
}
[TestMethod]
public void FooTest()
{
// Arrange
Mock<IFoo> fooMock = new Mock<IFoo>();
fooMock.Setup(f => f.Bar(ItExt.IsConventional<int?>()))
.Verifiable();
// Act
fooMock.Object.Bar(1);
// Assert
fooMock.VerifyAll(); // throws
}
}
注意。