2010-12-15 3 views
1

unit-testing of classes that all follow the same interfaceのためにGrensesnittを使用している人はいませんか?パラメータのないコンストラクタを持たないクラスには問題があります。私はGrensesnittObjectLocatorがあることを知っているが、私はそれを使用する方法を把握することはできません。パラメータのないコンストラクタがないクラスのGrensesnitt?

grensesnittでパラメータのないコンストラクタを持たないこれらのクラスをテストする方法をアドバイスしてください。

答えて

0

私はこれを箱から出してもらえませんでした。私は少しそれを微調整しなければならなかった。だから、GrensesnittObjectLocator.GetHandler方法の代わりに、内側:私は、次のexmapleを書いた場所にこの変更によって

public static Func<object> GetHandler(Type T) 
{ 
    return() => 
    { 
     Func<object> handler; 
     if (handleAll != null) return handleAll(T); 
     if (map.TryGetValue(T, out handler)) 
     { 
      return handler(); 
     } 
     return TryReflections(T); 
    }; 
}  

public interface IFoo 
{ 
    int Add(int a, int b); 
} 

public class Foo : IFoo 
{ 
    private readonly string _foo; 
    public Foo(string foo) 
    { 
     _foo = foo; 
    } 

    public int Add(int a, int b) 
    { 
     return a + b; 
    } 
} 

あなたはどのように見ることができます

public static Func<object> GetHandler(Type T) 
{ 
    Func<object> handler; 
    if (handleAll != null) return() => { return handleAll(T); }; 
    if (map.TryGetValue(T, out handler)) 
    { 
     return (Func<object>)handler; 
    } 
    return() => { return TryReflections(T); }; 
} 

私はそれを修正しましたFooクラスにはデフォルトコンストラクタがありません。だから今、私たちはこのテストを持つことができます。

[InterfaceSpecification] 
public class IFooTests : AppliesToAll<IFoo> 
{ 
    [Test] 
    public void can_add_two_numbers() 
    { 
     Assert.AreEqual(5, subject.Add(2, 3)); 
    } 
} 

そして、単にあなたのテストアセンブリ(以前のユニットテストが含まれている同じアセンブリ)に次のクラスを追加Fooをインスタンス化する方法grensesnittに示すために:

[SetUpFixture] 
public class Config 
{ 
    [SetUp] 
    public void SetUp() 
    { 
     // indicate to Grensesnitt that the Foo class 
     // doesn't have a default constructor and that 
     // it is up to you to provide an instance 
     GrensesnittObjectLocator.Register<Foo>(() => 
     { 
      return new Foo("abc"); 
     }); 
    } 
} 
+0

はい、うまくいきました。ありがとうございます。 grensesnittのgit(https://github.com/gregoryyoung/grensesnitt)用のパッチを作成する必要があります。 – zzandy

+0

@zzandy、これはパッチを提供するためのバグであるかどうかはわかりません。たぶん私はこのライブラリを正しく使う方法を知りません。 –

関連する問題