我要嘗試TDD,我正在爲此研究正確的工具。 在工作中,我們使用MS Fakes,所以不用更改它,並使用MS Fakes和TDD。 但我有一個嚴重的問題。在我看來,那MS假貨意在場景中使用:寫代碼 - 它>寫單元測試。我怎樣才能嘲笑一些接口在TDD與MS假貨?TDD與MS Fakes
例如我有以下的一個文件代碼(重構將在稍後完成)
[TestClass]
public class MyTests
{
[TestMethod]
public void ShouldReturnSomeResultIfEmptyCollectionOfCustomersWasReturned()
{
// arrange
ICustomerRepository customerRepository = null;
var targetService = new MyTargetService(customerRepository);
// act
int result = targetService.MyMethod();
// assert
Assert.AreEqual(1, result);
}
}
public class MyTargetService : IMyTargetService
{
private readonly ICustomerRepository customerRepository;
public MyTargetService(ICustomerRepository customerRepository)
{
this.customerRepository = customerRepository;
}
public int MyMethod()
{
if (customerRepository.GetCustomers().Any())
{
return 0;
}
return 1;
}
}
public interface IMyTargetService
{
}
public interface ICustomerRepository
{
Customer[] GetCustomers();
}
public class Customer
{
}
在我的TDD過程中,我把一切都放在一個文件,然後將重構這個並移動到不同組件。但我需要在這個地方模擬內嵌ICustomerRepository customerRepository = null;
。例如,我可以用NSubstitute輕鬆做到這一點。但是如果我使用MS Fakes,我需要首先將此接口移動到另一個項目,從單元測試所在的位置引用此項目,然後按「添加僞裝配」。這似乎是非常複雜的工作流程,這使得TDD不那麼快速和高效。 我想有這樣的代碼只是不到位所有那些奇怪的操作:
ICustomerRepository customerRepository = new StubBase<ICustomerRepository>
{
GetCustomers =() => Enumerable.Empty<Customer>().ToArray(),
};
但StubBase<>
是抽象的。那麼有沒有辦法用MS Fakes來做這樣的事情呢?
我在代碼之前編寫測試。經過幾次迭代測試 - >代碼 - >重構後,我發佈了結果代碼。 –
抱歉,誤會 –