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

    一句话,被测试方法的返回类型的对应的类,必须覆盖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#还是有些语法细节需要注意。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值