2011-07-07 9 views
1

模擬オブジェクトの期待値は、慣習や例を使って設定できますか?MoQ +慣習によるSetUp

I.e.

これに代わる方法がありますか、これを達成するためにソースを変更する必要はありますか?あるいはこれを行うことができるライブラリがありますか?

答えて

0

あなたはMoqでこれを行うことはできません。私はこれを行うことができるライブラリについては気づきません。

1

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 
    } 
} 

注意。

関連する問題