TDD:在代码中测试什么是800以及更多可能的输出?

时间:2013-07-27 20:13:00

标签: tdd

我的类具有属性IsMacro,Value,Visible,DataType和一个方法GetResolvedValue。我不知道该测试什么。我做了一些数学运算,并且我发现该方法有超过800种可能的输出。

enum DataTypeEnum:
  Bool,
  String,
  DateTime,
  Integer,
  LongInteger,
  Decimal,
  ...

class Macro
  property bool IsMacro;
  property string Value;
  property bool Visible;
  property DataTypeEnum DataType;

  function GetResolvedValue(Resolver) {
      string value = Value;

      if (IsMacro && Visilbe) {
        value = Resolver.resolve(value);
      }

      switch (DataType){
          case String:
              // returns value if is string e.g.: "text"
              // othervise returns empty string
          case Bool:
              // returns value if is bool string e.g.: "true"
              // othervise returns empty string
          case DateTime:
              // returns value if is DateTime string e.g.: "2/2/2010"
              // othervise returns empty string
          ...
      }        
  }

因此它必须始终返回具有对关联数据类型或空字符串有效的值的字符串。

使用此代码有很多组合,我不知道如何测试它。我会测试所有可行的解决方案吗?

1 个答案:

答案 0 :(得分:4)

听取你的测试!
即使是现在,在写入之前,您的测试会告诉您此方法严重违反SRP并需要重构。
您应该从这一种方法中提取整个类的层次结构。