0

我有一种方法,可以在停车场(Entries,Exits)中列出汽车运动(Operation 类),每个运动都有一个相关的汽车列表(OperationVehicle 类)。这种方法应该会产生我所说的汽车日志。它列出了所有汽车,在什么时间进入什么时间退出以及每辆汽车的持续时间。我对首先要测试的东西有点迷茫。这个问题的答案对我来说就像一个教程。

如何继续使用 tdd 对这个特定逻辑进行单元测试?

public class Operation
    {
        public Operation()
        {
            OperationVehicles = new List<OperationVehicle>();
        }
        public int OperationId { get; set; }
        public DateTime Date { get; set; }
        public virtual OperationType OperationType { get; set; }
        public virtual List<OperationVehicle> OperationVehicles { get; set; }

    }

public class OperationVehicle
    {
        public int OperationVehicleId { get; set; }
        public OperationType OperationType { get; set; }
        public virtual Operation Operation { get; set; }
        public virtual Vehicle Vehicle { get; set; }
    }

public class CarLog
    {
        public int Id { get; set; }
        public DateTime Date { get; set; }
        public Vehicle Vehicle { get; set; }
        public int StayLength { get; set; }
    }

   public IEnumerable<CarLog> GenerateCarsLog(List<Operation> CarStayOperations)
        {
           // not implemented yet
            return new List<CarLog>();
        }
4

1 回答 1

4

到目前为止,您所做的是您已经用代码(关系)对您的域进行了建模。但是你没有写太多逻辑,所以没有太多要测试的东西。

我不会让您的测试与这些类交互,至少不要开始。相反,我可能会从用户界面的某个地方开始。模拟用户执行的操作(对于用户,我不一定是指人类,但它可能是另一个系统)。测试行为,并尽可能靠近系统边界进行。

如果没有更多关于上下文的知识,很难回答到底要写什么测试。但我会试一试。

那么用户应该能够使用您的系统做什么呢?例如,编写一个汽车进入停车场的第一个测试,并让测试以某种方式断言汽车现在在停车场。

但是用户(或其他用户)如何知道汽车成功进入停车场呢?例如,是否有某种用于 Car Log 的用户界面?让你的测试断言看看。

然而,这将是一个相当大的测试,包括输入汽车和检查汽车日志。最好从汽车日志开始:只是验证它是空的。或者也许你可以从更小的步骤开始?

我的回答有点试探性,因为它通常是这样的:你边学习边发现。

设计说明:请不要公开您的课程中的列表 ( OperationVehicles)。它完全打破了封装。Operation.AddOperationVehicle()改为添加一个方法并返回一个IEnumerable<OperationVehicle>.

于 2013-07-29T06:38:23.317 回答