2016-04-19 22 views
3

NUnitから「適切なコンストラクタが見つかりませんでした」という問題があります。この原因は何ですか?また、「例外にはスタックトレースがありません」という別のメッセージが表示されます。両方のメッセージが何度も何度も何度も繰り返す。ここに私のコードは、あなたのSecurityServiceTestsクラスはTextFixtureとして使用するデフォルトコンストラクタを持っている必要がありますNunitテストで結果が得られましたOneTimeSetUp:適切なコンストラクタが見つかりません

[TestFixture] 
public class SecurityServiceTests 
{ 
    private IContext stubIContext; 
    private ISecurityService securityService; 
    private IWindsorContainer windsorContainer; 

    public SecurityServiceTests(IContext stubIContext) 
    { 
     this.stubIContext= stubIContext; 
    } 

    [TestFixtureSetUp] 
    public void TestSetup() 
    { 
     //Mocks the database context 
     stubIContext= MockRepository.GenerateStub<IContext>(); 
     var returnedList = new List<string>(); 
     stubIContext.Stub(a => a.GetUserSecurities(null)).IgnoreArguments().Return(returnedList); 

     securityService = new SecurityService(windsorContainer); 

    } 

    [Test] 
    public void ControllerShouldGetUserGroupForCurrentUsers() 
    { 
     //Act 
     var action = securityService.CurrentUserFeatureList; 

     //Assert 
     Assert.IsNotNull(action); 
    } 


} 

答えて

3

です。 docs on TextFixtureから

テストフィクスチャとして使用されるクラスには、いくつかの制限があります。

公開されているタイプである必要があります。そうでないと、NUnitは表示されません。

これはデフォルトのコンストラクタを持っている必要があります。そうしないと、NUnitはそのコンストラクタを構築できません。

それははっきりしていないとにかくなぜあなたが受け入れ、あなたがして、セットアップ中にその場を模擬するために行くようIContext stubIContextを設定し、そのクラスのコンストラクタを持っています。

public SecurityServiceTests(IContext stubIContext)コンストラクタを削除すると、テストが実行されます。

編集:コメントで@クリスで指摘したように、それは、slightly different in NUnit3です:引数がTestFixtureAttributeで提供されていない場合は

、クラスは、デフォルトコンストラクタを持っている必要があります。

引数が指定されている場合、それらはコンストラクタの1つに一致する必要があります。

+0

NUnit3では、TestFixturesをパラメータ化できます。しかし、あなたが正しい、これはここで欲しいもののように見えません。 [v3 Docs](https://github.com/nunit/docs/wiki/TestFixture-Attribute) – Chris

4

パラメータ化されたフィクスチャを作成しようとしています。そのため、単一の引数を取るコンストラクタがあります。上記のコメントとは異なり、これはNUnit V2とV3の両方で有効です。

しかし、NUnitがそのコンストラクタを使用するには、それを適用する引数を与えなければなりません。あなたはおそらく、あなたがTestFixtureSetUpでstubIContextに値を割り当てることによって、そのような何かをしようとしている

[TestFixture(someArgument)] 

を指定することでこれを行うだろう。しかし、それは、2つの理由のために働くことはできません。

  1. それはコンストラクタに供給されていないと、あなたのフィクスチャがそれを必要とするところです。

  2. とにかく、オブジェクトの構築はそのセットアップメソッドが呼び出される前に行われます。

特に、NUnit v3では、フィクスチャがインスタンス化される前にスタブを作成する方法はいくつかあります。しかし、実際にスタブを使用しているので、このフィクスチャをパラメータ化する必要があるのは実際にはわかりません。

例に示されていない他のパラメータ設定が必要な場合を除き、セットアップでスタブを作成するだけです。私の好みはTestFixtureSetUpではなくSetUpを使うことです。スタブを作成するのは高価ではないので、節約する理由はないようです。ただし、抜粋に記載されていない理由がある場合は、TestFixtureSetUpも機能します。

関連する問題