Sembra buono! Tuttavia, puoi anche usarlo declaratively con xUnit.net extension.
Supponendo che i tipi utilizzati nel test sono definiti come:
public class CardHolderCustomer
{
}
public interface ICustomerAdapter
{
CardHolderCustomer BuildCustomer();
}
public class CardHolderViewModel
{
private readonly ICustomerAdapter adapter;
public CardHolderViewModel(ICustomerAdapter adapter)
{
if (adapter == null)
throw new ArgumentNullException("adapter");
this.adapter = adapter;
}
public CardHolderCustomer Customer
{
get
{
return this.adapter.BuildCustomer();
}
}
}
La prova originale può essere scritta come:
[Theory, DomainTestConventions]
public void CustomerPropertyIsCorrect2(
CardHolderCustomer expected,
[Frozen]Mock<ICustomerAdapter> builderStub,
CardHolderViewModel sut)
{
builderStub
.Setup(x => x.BuildCustomer())
.Returns(expected);
var actual = sut.Customer;
Assert.Equal(expected, actual);
}
Il DomainTestConventionsAttribute
è definito come:
internal class DomainTestConventionsAttribute : AutoDataAttribute
{
internal DomainTestConventionsAttribute()
:base(new Fixture().Customize(new DomainTestConventions()))
{
}
}
Il DomainTestConventions
è definito come:
internal class DomainTestConventions : CompositeCustomization
{
internal DomainTestConventions()
:base(new AutoMoqCustomization())
{
}
}
noti che DomainTestConventions
deriva da CompositeCustomization
che sostanzialmente significa che è possibile creare più personalizzazioni e aggiungerli come parametri al costruttore di base.
È anche possibile leggere:
Speranza che aiuta.
fonte
2013-03-05 05:23:19
Grazie! Questo è esattamente il feedback che stavo cercando. – cocogorilla
Devo solo aggiungere ... il fatto che abbiate riprodotto il mio codice cieco si dimostra migliore di qualsiasi altro libro agile che i test siano la fonte primaria di documentazione per il codice. – cocogorilla
+1 Solo un'ottima risposta –