簡體   English   中英

Nunit 測試給出結果 OneTimeSetUp:找不到合適的構造函數

[英]Nunit test gives result OneTimeSetUp: No suitable constructor was found

我有一個問題,NUnit 告訴我:“找不到合適的構造函數”。 這是什么原因造成的? 我還收到另一條消息:“異常沒有堆棧跟蹤”。 這兩條消息只是一遍又一遍地重復。 這是我的代碼

[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);
    }


}

您正在嘗試創建一個參數化夾具,因此您有一個采用單個參數的構造函數。 與上面的評論相反,這在 NUnit V2 和 V3 中都有效。

然而,為了讓 NUnit 使用那個構造函數,你必須給它一個要應用的參數,而你沒有這樣做。 你可以通過指定來做到這一點

[TestFixture(someArgument)]

可能您打算通過為 TestFixtureSetUp 中的 stubIContext 分配一個值來做類似的事情。 但是,由於兩個原因,這不起作用:

  1. 它沒有提供給構造函數,而這正是您的裝置需要它的地方。

  2. 無論如何,對象的構造發生在調用該設置方法之前。

有幾種方法可以在實例化夾具之前創建存根,尤其是在 NUnit v3 中。 但是,我實際上不明白為什么需要對這個裝置進行參數化,因為無論如何您都在使用存根。

除非您有其他一些參數化需求(示例中未顯示),否則我只會在設置中創建存根。 我更喜歡使用 SetUp 而不是 TestFixtureSetUp。 創建存根並不昂貴,因此似乎沒有理由節約。 但是,如果有摘錄中沒有看到的原因,TestFixtureSetUp 也可以工作。

您的SecurityServiceTests類需要有一個默認構造函數來用作TextFixture

TextFixture 上文檔

對於用作測試裝置的類有一些限制。

它必須是公開導出的類型,否則 NUnit 將看不到它。

它必須有一個默認構造函數,否則 NUnit 將無法構造它。

無論如何都不清楚為什么在該類中有一個構造函數接受並設置IContext stubIContext ,然后您繼續在 Setup 中模擬該字段。

刪除public SecurityServiceTests(IContext stubIContext)構造函數,測試將運行。

編輯:正如@Chris 在評論中指出的那樣,它在 NUnit3 中略有不同

如果 TestFixtureAttribute 未提供任何參數,則該類必須具有默認構造函數。

如果提供了參數,則它們必須與構造函數之一匹配。

我所擁有的,它的構造函數是受保護的而不是公共的,所以 Nunit 找不到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM