【问题标题】:nunit testing of method which calls other method调用其他方法的方法的单元测试
【发布时间】:2014-05-29 08:05:58
【问题描述】:

我对 nunit 很陌生。下面是业务部门代码

public enum HighlightType
{
    IP,
    Item,
    Address
}

public class UniformGridHighlighting
{
    public static event HighlightingChangedDelegate HighlightingChanged;

    private static List<string> _highlightedIPs = new List<string>();
    private static List<long> _highlightedItems = new List<long>();
    private static ContactInfoType _highlightedAddress;

    public static void ClearIPHighlighting()
    {
        _highlightedIPs.Clear();
        OnHighlightingChanged(HighlightType.IP);
    }

    private static void OnHighlightingChanged(HighlightType type)
    {
        if (HighlightingChanged != null)
        {
            HighlightingChanged(type);
        }
    }
}

我需要为ClearIPHighlighting 编写单元测试用例。我该如何进行。

  [Test(Description = "to ")] 
  public void ClearIPHighlightingTets()
  {
       UniformGridHighlighting.ClearIPHighlighting();
       //How to call method
  }

【问题讨论】:

  • 那么,你想测试什么?
  • 想测试clearIPhighlighting方法
  • 在当前的设置中你不能,你共享的代码只更新私人的东西。清除它有什么作用?你能在其他地方看到清除的结果吗?
  • 您可以测试事件是否按预期触发。

标签: c# .net unit-testing nunit


【解决方案1】:

鉴于当前设置,您只能测试是否触发了事件。

 [Test()] 
 public void ThatTheEventIsTriggeredWhenTheListIsCleared()
 {
    // Arrange
    bool eventTriggered = false;
    UniformGridHighlighting.HighlightingChanged += _ => { eventTriggered= true; };

    //Act
    UniformGridHighlighting.ClearIPHighlighting();

    //Assert:
    Assert.IsTrue(eventTriggered);
 }

而且它是正确的类型

 [Test(Description = "to ")] 
 public void ThatTheEventIsTriggeredWithTheIPArgumentWhenTheIPListIsCleared()
 {
    // Arrange
    HighlightType? type = null;
    UniformGridHighlighting.HighlightingChanged += x => { type = x; };

    //Act
    UniformGridHighlighting.ClearIPHighlighting();

    //Assert:
    Assert.AreEqual(s, HighlightType.IP);
 }

要测试您之前的突出显示是否已被删除会更难:

 [Test] 
 public void ThatTheIpIsNotHighlightedIfTheListWasCleared()
 {
    UniformGridHighlighting.HighlightIP("1.1.1.1");

    //Act
    UniformGridHighlighting.ClearIPHighlighting();
    UniformGridHighlighting.Highlihst(Grid);

    //Assert:
    //Go through the grid to figure out that the IP was not highlighted. The below is a total guess:
    bool wasHighlighted = Grid.Rows.Any(row => row.Cells.Any(Cell.Highlighted));
    Assert.Isfalse(wasHighlighted);
 }

【讨论】:

  • 最后重要的是测试预期的功能,而不是它是否以特定方式实现。除了调用_highlightedIPs.Clear();之外,可能还有其他方法可以清除IP,但如果结果相同,则测试应该不会失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2011-05-06
  • 2017-12-21
相关资源
最近更新 更多