[英]TDD code to force lazy initialization
如果要遵循測試驅動的開發周期,則必須始終先編寫測試,然后再編寫代碼。 但是,如果我有以下課程:
public class ServiceProvider : IServiceProvider
{
private readonly IService1 service1;
private readonly IService2 service2;
...
public ServiceProvider()
{
service1 = new Service1();
service2 = new Service2();
...
}
public IService1 Service1 { get { return service1; } }
public IService2 Service2 { get { return service2; } }
...
}
和一個僅檢查返回的實例不為null的測試:
[TestFixture]
public class ServiceProviderTest
{
[Test]
public void ServicesAreNotNull()
{
var serviceProviderUT = new ServiceProvider();
Assert.That(serviceProviderUT.Service1, Is.Not.Null);
Assert.That(serviceProviderUT.Service2, Is.Not.Null);
...
}
}
我該如何編寫一項測試,迫使我從該課程轉到下一個課程?
public class ServiceProvider : IServiceProvider
{
private readonly Lazy<IService1> service1;
private readonly Lazy<IService2> service2;
...
public ServiceProvider()
{
service1 = new Lazy<IService1>(() => new Service1());
service2 = new Lazy<IService2>(() => new Service2());
...
}
public IService1 Service1 { get { return service1.Value; } }
public IService2 Service2 { get { return service2.Value; } }
...
}
您的測試不應強迫您執行特定的實現。 它期望某種行為。 對於單元測試,您的代碼是黑盒,如果行為正確,則測試成功。 在這種情況下,服務的實現是私有的,因此您的測試無需擔心其實現方式。 如果類的界面未更改,則應該具有相同的單元測試。 延遲初始化更多是代碼審查項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.