现在的位置: 首页 > 综合 > 正文

C#下如何给返回类型是类类型的方法做单元测试

2018年05月25日 ⁄ 综合 ⁄ 共 1334字 ⁄ 字号 评论关闭

    一句话,被测试方法的返回类型的对应的类,必须覆盖Equals()方法。

  

//返回类型
class myObject
{
        public int data;
 }

//被测试方法
public myObject objectAdd(myObject opnd1, myObject opnd2)
{
        myObject result = new myObject();
        result.data = opnd1.data + opnd2.data;
        return result;
}

//被测试方法的单元测试函数
        /// <summary>
        ///objectAdd 的测试
        ///</summary>
        [TestMethod()]
        public void objectAddTest()
        {
            Calculator target = new Calculator(); // TODO: 初始化为适当的值
            myObject opnd1 = new myObject(); // TODO: 初始化为适当的值
            opnd1.data = 1;
            myObject opnd2 = new myObject(); // TODO: 初始化为适当的值
            opnd2.data = 2;
            myObject expected = new myObject(); // TODO: 初始化为适当的值
            expected.data = 3;

            myObject actual;
            actual = target.objectAdd(opnd1, opnd2);
            Assert.AreEqual(expected, actual);
            //Assert.Inconclusive("验证此测试方法的正确性。");
        }
    


    objectAdd()方法的单元测试方法将永远测试失败。后来我猜测Assert.AreEqual()方法调用了Equals方法来判别两个对象是否一样。但是类如果没有重新覆盖Object类的Equals()方法的话,那么调用的将是原始的Equals()方法,这个方法只看两个引用变量指向的对象的地址是否一样,不看其他的。

    所以没有特殊要求,如果需要在测试时比较两个对象的内容是否一样的话,得覆盖Object类的Equals()方法,比较引用所指向的对象的内容,而不是引用所指向的对象的地址是否一样!


    示例覆盖如下:

class myObject
    {
        public int data;

        public override bool Equals(object o)
        {
            if (data == ((myObject)o).data) return true;
            return false;
        }
    }

   这样便可以对返回类型为类类型的方法进行合理的测试。


   另外,C#语法跟Java的有些不同,Java下覆盖父类方法不需要override之类的关键字。但是C#则不一样,必须要,我最开始就是没加override关键字,导致半天没试出来。java跟C#还是有些语法细节需要注意。


抱歉!评论已关闭.