2012-03-30 61 views
2

我有一个用列表构建的深层树结构,包含列表和浮点数。 我想在这样的结构上做出断言,而不能使用浮点数的delta值。我的问题是,使用失败断言的输出是不够的,因为需要一个或两个额外的小数。我必须猜测这些小数点才能继续。Assert.AreEqual for float without delta

using System.Collections; 
using System.Linq; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 

    namespace TestAssertLab 
    { 
     public class List : ArrayList { 
      public List(params object[] list) { 
       AddRange(list); 
      } 
      public override bool Equals(object other) { 
       List l = other as List; 
       if (l != null) { 
        if (Count != l.Count) return false; 
        return !l.Cast<object>().Where((t, i) => !this[i].Equals(t)).Any(); 
       } 
       return false; 
      } 
      public override string ToString() { 
       string s = this.Cast<object>().Aggregate("", (current, item) => current + (item + ",")); 
       return "[" + s.TrimEnd(',') + "]"; 
      } 
     } 

     [TestClass] 
     public class AssertLab 
     { 
      public List z(params object[] l) { 
        return new List(l); 
      } 
      [TestMethod] 
      public void TestFails() { 
       List expected = z(0.1428571f, z(101, 102)); 
       List actual = z(1/7.0f,  z(101, 102)); 
       Assert.AreEqual(expected, actual); 
       // output: Assert.AreEqual failed. Expected:<[0.1428571,[101,102]]>. Actual:<[0.1428571,[101,102]]>. 
      } 
      [TestMethod] 
      public void TestOK() 
      { 
       List expected = z(0.142857143f, z(30101, 30102)); 
       List actual = z(1/7.0f, z(30101, 30102)); 
       Assert.AreEqual(expected, actual); 
      } 
     } 
    } 
+2

为什么你不能在你的断言使用的增量为您花车? – BrokenGlass 2012-03-30 21:31:24

+0

由于断言在树中的较高级别上,因此比较列表。 – 2012-03-30 21:54:39

回答

3

你可以将它们转换成十进制:

(Decimal) 0.1428571f == (Decimal)(1/7.0f) 
+0

工程,但我不得不放弃浮动。 – 2012-03-30 21:55:10

+0

您应该更好地使用C#内置类型的'decimal'。 – LoBo 2014-02-12 08:56:20