隨着NUnit的你可以用TestCase的做到這一點,
說,你需要使用的單元,採用CustomerRepository和OrderRepository單元/集成測試,
[TestFixture]
public class TestCustomerRepository
{
IKernel _unit;
Ikernel _integration;
[SetUp]
public void Setup()
{
//setup both kernels
}
[TestCase("Unit")]
[TestCase("Integration")]
public void DoTest(String type)
{
var custRepo = GetRepo<ICustomerRepository>(type);
var orderRepo = GetRepo<IOrderRepository>(type);
//do the test here
}
protected T GetRepo<T>(String type)
{
if (type.Equals("Unit"))
{
return _unit.Get<T>();
}
return _integration.Get<T>();
}
}
這是基本的想法。
假設我有一個實現了IService的服務,它依賴於由SqlServiceRepository實現的IServiceRepository並且它碰到了一個SQL DB。我想運行以IService爲目標的單元測試,因此我創建了一個實現IServiceRepository的MockServiceRepository,並使用DI爲僅使用內存集合的Mock存儲庫轉換SQL存儲庫。這完美地在本地運行,並在我的構建服務器上運行。現在我想使用相同的單元測試來測試SqlRepository,而不是使用Mock Repository,我想使用SQL Repository。 –
您正試圖重複使用相同的測試來測試完全不同的內容。編寫一個不同的測試來單獨測試SqlRepository。通過這種方式,測試更加專注,更加值得信賴。 – Steven
一致認爲,將工作,但然後我沒有得到結束測試,這是我所說的集成測試。 –