簡體   English   中英

使用Nunit,如何測試方法是否捕獲到異常?

[英]With Nunit, how to test if a method has caught an exception?

我有一種將數據保存在數據庫中的方法(C#和Mysql)。 我正在使用MVP模型,所以它的作用是保存在Presenter中>保存在服務中>保存在管理器中>保存到dao中。 我在管理器中執行數據完整性控制。

我想測試我的演示者。 第一次保存測試使用錯誤的值完成,以檢查我的經理是否引發異常。 問題是我的演示者捕獲了此異常,因此我無法使用Assert.Throws<Exception>(() => {DoSave();})因為Assert無法看到該異常。 NUnit中是否有一個Assert來檢查是否在測試代碼內引發了異常而未到達測試本身?

簡化后,它看起來像是:(演示者)

    private void SaveData()
    {
            try
            {
                //Calls service who calls manager who checks data then call DAO to save.
                if (MyService.SaveData(currentData, ReferentielType.ENEG))
                {
                    //Success
                }
                else
                {
                    //Failure
                }
            }
            //Thrown by the manager if the data are incorrect
            catch (DataInvalidException ex)
            {
                // log exception as error
                TraceHelper.TraceError(ex, "The data {0} is not correct", currentData.Code);

                // send a message to user
                MessageContainer.Instance.SendErrorMessage("DataInvalid", BusinessError.DataInvalid, currentData.Code);
            }
        }
    }

和我的測試:

[Test]
    public void UpdateDataTest()
    {
        //Test setup 
        //making fake data
        //When the var etatDuTest is different from 0, it means some of the data are invalid

        //Instance of the presenter
        MockView view = new MockView();
        PresenterToTest presenter = new PresenterToTest(view);

        //Testing with invalid values
        //bad label
        ((MockView)((IView)presenter.View)).etatDuTest = 1;
        Assert.Throws<DataInvalidException>(() => { ((MockView)((IView)presenter.View)).RaiseSaveDataClicked(); });
        //Bad num eva
        ((MockView)((IView)presenter.View)).etatDuTest = 2;
        Assert.Throws<DataInvalidException>(() => { ((MockView)((IView)presenter.View)).RaiseSaveDataClicked(); });

        //Testing with everything OK
        //Tout est bon logiquement.
        ((MockView)((IView)presenter.View)).etatDuTest = 0;
        ((MockView)((IView)presenter.View)).RaiseSaveDataClicked();

    }

測試是否已捕獲異常本身是沒有意義的測試。 您應該測試catch塊內發生的情況,這將驗證是否捕獲到異常。

如果您可以驗證MessageContainer.Instance是否包含該DataInvalid錯誤消息,那實際上就是您的最佳選擇。

暫無
暫無

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

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