为了账号安全,请及时绑定邮箱和手机立即绑定

从测试方法传递空对象

从测试方法传递空对象

C#
宝慕林4294392 2021-09-19 15:59:00
我有一个类Class1,它有一个构造函数和几个方法。对于这些方法,我正在使用 MSTest 编写单元测试用例。这堂课看起来像这样。class Class1{    Order order = new Order(); // there is an class Order    public Class1(Order _order)    {        order = _order;    }    public virtual async Task<bool> GetData()    {        if(order != null)        {            //do something        }        else        {            // do something else        }    }}现在,我必须为此 GetData() 方法编写 2 个测试用例,分别测试 if 块和测试 else 块。我能够成功测试 if 块,但无法测试 else 块。我正在尝试编写的测试方法如下。[TestMethod()]public void GetDataTest(){    Order order = new Order();    order = null;    var mockService = new Mock<Class1>(order)    {        CallBase = true    };    var result = await mockService.Object.GetData(); // error thrown from here    Assert.IsFalse(result);}我想要做的是将订单对象设置为空并将空对象传递给构造函数。但这会引发一些错误“找到歧义匹配”。显然,传递空值在这里不起作用。所以任何人都可以告诉我测试 else 块的任何其他工作。PS:我需要测试 if 和 else 块,以便将其包含在代码覆盖率中。
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

如果您的代码是真实的,那么实际上不需要模拟被测服务。


这工作得很好:


[TestMethod]

public async Task GetDataTest()

{

    //Arrange

    Order order = null;

    var c1 = new Class1(order);


    //Act

    var result = await c1.GetData();


    //Assert

    Assert.IsFalse(result);

}


查看完整回答
反对 回复 2021-09-19
?
波斯汪

TA贡献1811条经验 获得超4个赞

您必须从“GetData()”返回


public virtual async Task<bool> GetData()    

{

    if(order != null)

    {

        //do something

    }

    else

    {

        // do something else

    }

//return task here with await keyword;

}


查看完整回答
反对 回复 2021-09-19
?
PIPIONE

TA贡献1829条经验 获得超9个赞

好吧,单元测试用例和您共享的代码没有任何问题


除了


您没有返回任务,并且错误“找到了歧义匹配”看起来来自编写在 else 块中的代码内部。


尝试将您的GetData()方法更改为:


public virtual async Task<bool> GetData()

        {

            TaskCompletionSource<bool> ts = new TaskCompletionSource<bool>();

            if (order != null)

            {

                //do something

                ts.SetResult(true);

            }

            else

            {

                // do something else

                ts.SetResult(false);

            }

            return await ts.Task;

        }


查看完整回答
反对 回复 2021-09-19
  • 3 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信