簡體   English   中英

Nunit和Nmock的類的單元測試級別

[英]Unit testing levels of classes with Nunit and Nmock

我有一些類和接口,分別是Level1Level2Level3
Level1類取決於Level2類, Level2取決於Level3類。

這是該設計的代碼:

public interface ILevel1
{
    string GetData();
}

public class Level1 : ILevel1
{
    ILevel2 level2;
    public Level1(ILevel2 level2)
    {
        this.level2 = level2;
    }

    public string GetData()
    {
        // some more process on data.
        var data = level2.GetDataAndProc();
        data = data + ",Proc at Level1";
        return data;
    }
}

public interface ILevel2
{
    string GetDataAndProc();        
}

public class Level2 : ILevel2
{    
    ILevel3 level3;
    public Level2(ILevel3 level3)
    {
        this.level3=level3;
    }

    public string GetDataAndProc()
    {
        var data=level3.GetDataFromDB();
        // processing on the data from db.
        data=data+ " Processed at level2";
        return data;
    }
}

public interface ILevel3
{
    string GetDataFromDB();
}

public class Level3 : ILevel3
{
   public string GetDataFromDB()
   {
       // Functionalities to get data from db.
       return "DB Data";
   }
}

現在,我可以在隔離模擬Level2接口中進行單元測試類Level1 ,並在隔離模擬Level3接口中進行單元測試類Level2 我正在使用Nunit作為測試框架,並使用NMock作為模擬框架。

到現在為止還挺好。

但是,是否可以僅對模擬Level3接口而不對Level2 Level3對前兩個代碼級別進行單元測試? 我的意思是我想在不模擬Level2而是模擬Level3情況下對類Level1進行單元測試。 我之所以想這樣做,是因為Level3類從數據庫中獲取數據,並且我只希望模擬該數據庫層,以便我的整個項目只能與模擬db一起使用,而不能與真實數據庫一起使用。

很簡單:

// arrange
var mocks = new Mockery();
var mockLevel3 = mocks.NewMock<ILevel3>();
// now do some actual mocking here

var level2 = new Level2(mockLevel3);
var level1 = new Level1(level2);

// now do some act and assert stuff

我認為這是一個集成測試。 此時所有類是否都在同一程序集中並不重要。 集成測試不一定涉及將某些程序集整合到測試中。

暫無
暫無

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

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