【问题标题】:partially touched code coverage area VS 2017部分触及代码覆盖区域 VS 2017
【发布时间】:2018-12-26 14:44:12
【问题描述】:

我正在进行测试并且必须达到一定的代码覆盖率。我在事件调用的声明中遇到了问题,代码覆盖率总是显示部分接触的情况,因此影响了我的整体覆盖率。

如何才能算作全面覆盖

我已经看到了一些相同的问题,但没有一个确切的答案可以解决这么小的事情(或至少看起来很小的事情)。

代码如下

public class ClassToBeTested
{
    public event Action myEvent = delegate {};

    public void Function1 ()
    {
        myEvent?.invoke();  //partially touched
    }
}


public class  TestingClass
{
    [Fact]
    public void TestingFunction1()
    {
        bool eventCheck = false;
        ClassToBeTested obj = new ClassToBeTested();
        obj.myEvent += delegate { eventCheck = true ;};
        obj.Function1();
        Assert.True(eventCheck);
    }
}

【问题讨论】:

  • 您正在将事件分配给一个新的委托,但据我所知,没有什么会调用调用事件的函数?我是否遗漏了什么,或者您只是需要在Assert 行之前的单元测试中调用ClassTobeTested.Function1();
  • 我编辑了我的问题。所以我不应该把它分配给任何东西或者我是怎么做的吗?
  • 该示例的语法看起来不准确。
  • 我编辑了它,我只是写了一个例子,说明事情是如何工作的,问题是什么,它不是真正的代码。
  • 虽然不是真正的代码,但提供的示例甚至不会编译为委托 Action<T> 不接受 0 个参数。提供可用于重现问题的 minimal reproducible example

标签: c# visual-studio code-coverage xunit


【解决方案1】:

您使用 null 检查对其进行编码的方式使其无法获得更高的覆盖率,因为 myEvent 永远不能为 null,因为您已将其初始化为非 null:

public event Action myEvent = delegate {};

要获得全面覆盖,您需要:

public event Action myEvent = delegate {};

public void Function1 ()
{
    myEvent.invoke();
}

public event Action myEvent;

public void Function1 ()
{
    myEvent?.invoke();
}

有两个测试:一个在myEvent 为空时进行测试,另一个在您添加了事件处理程序时进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2018-03-06
    • 2017-09-22
    • 2020-04-02
    • 1970-01-01
    • 2017-08-18
    相关资源
    最近更新 更多