いい感じです!ただし、xUnit.net拡張機能を使用して宣言的に使用することもできます。
テストで使用される型が次のように定義されていると仮定します。
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();
}
}
}
元のテストは次のように記述できます。
[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);
}
は次のDomainTestConventionsAttribute
ように定義されます。
internal class DomainTestConventionsAttribute : AutoDataAttribute
{
internal DomainTestConventionsAttribute()
:base(new Fixture().Customize(new DomainTestConventions()))
{
}
}
は次のDomainTestConventions
ように定義されます。
internal class DomainTestConventions : CompositeCustomization
{
internal DomainTestConventions()
:base(new AutoMoqCustomization())
{
}
}
基本的に、より多くのカスタマイズを作成し、それらを基本コンストラクターにパラメーターとして追加できることを意味するDomainTestConventions
派生元であることに注意してください。CompositeCustomization
また読むことができます:
それが役立つことを願っています。