测试类中的对象实例化

fea*_*net 8 c# unit-testing

我正在使用MS UnitTesting并试图找到我的第一次单元测试.似乎我的所有单元测试都是从创建相同的几个对象开始的......

[TestMethod]
CanCreateOrder()
{
    <create an order>
    ...
}


[TestMethod]
CanSetOrderDeliveryAddress()
{
    <create an order>
    <create an address>
    order.DeliveryAddress = address;
    ...
}

[TestMethod]
CanDispatchAnOrder()
{
    <create an order>
    <create an address>
    order.DeliveryAddress = address;
    order.Dispatch();
    ...
}
Run Code Online (Sandbox Code Playgroud)

...等等

这是正常的,还是我的想法错了?我认为每个测试都应该是独立的,但是如果Dispatch()没有那个隐含地依赖CreateOrder并且SetDeliveryAddress已经通过测试怎么可能呢?

问题的第二部分,如果上面的方法看起来不错,我应该使用工厂或其他东西在我的测试项目中实例化这些对象吗?我不确定测试项目是否应该只包含测试类/方法,或者也可以添加一堆帮助程序.

Jon*_*all 8

你似乎走在了正确的轨道上.在许多单元测试中,您需要设置要测试的对象的状态,以便能够测试特定的行为部分.当您测试的bahaviour需要类似设置时,它将有助于在类中对测试进行分组,并使用[TestInitialize]方法来减少该设置的重复.

例如:

[TestClass]
public class WhenReadyToDispatch{

private Order order;

[TestInitialize]
public void Initialize
{
     order = <create an order>
    order.DeliveryAddress = <create an address>
}

[TestMethod]
CanChangeOrderDeliveryAddress()
{

    order.DeliveryAddress = address;
}

[TestMethod]
CanDispatchAnOrder()
{
    order.Dispatch();
}

}
Run Code Online (Sandbox Code Playgroud)

在测试项目中拥有辅助类是很好的 - 您应该将测试代码作为生产代码.