【问题标题】:Unit Testing UIElements单元测试 UIElements
【发布时间】:2013-09-14 16:08:29
【问题描述】:

首先让我说我是单元测试的新手,这实际上是我第一次尝试这样做。

我正在开发一个应用程序,用户可以在其中向Canvas 添加元素、选择它们、移动它们等等。在每个选定的元素上,我添加一个Adorner。当控件被取消选择时,装饰器被移除。

我有一个接收UIElement 并删除Adorner 的方法,这就是我正在测试的方法。

我用来移除装饰器的方法是:

public static void ClearElementAdorners(UIElement element)
{
    IEnumerable<Adorner> a = AdornerLayer.GetAdornerLayer(element).GetAdorners(element).AsEnumerable<Adorner>();
    if (a != null)
    {
        a.ToList().ForEach((p) =>
        {
            AdornerLayer.GetAdornerLayer(element).Remove(p);
        });
    }
}

我用来测试的方法就是这个。

[TestMethod]
public void ClearElementAdornersUnitTesting()
{

    Button el = new Button();
    Button el2 = new Button();
    TestingWindow t = new TestingWindow();
    t.Show();

    t.TestingCanvas.Children.Add(el);
    t.TestingCanvas.Children.Add(el2);

    AdornerLayer alayer = AdornerLayer.GetAdornerLayer(el2);
    alayer.Add(new ClassLibrary.EditModeAdornerLayer(el2));

    ClassLibrary.AdornerOperations.ClearElementAdorners(el2);
    Assert.AreEqual(el, el2);
}

我正在做的是创建两个按钮。其中一个得到一个装饰器,另一个作为测试的控制。我从元素中删除装饰器,最后检查它们是否相等。我已经调试了移除装饰器的方法,我知道它正在工作。我不知道如何测试它。 Assert.AreEqual 总是会因为这个错误而失败。

{"Assert.AreEqual failed. Expected:<System.Windows.Controls.Button>. Actual:<System.Windows.Controls.Button>. "}

同样,这可能是完全错误的,但是我该如何运行这个测试呢?如果需要更多信息,我很乐意提供。

谢谢

正确的做法是:

Adorner[] adorner = AdornerLayer.GetAdornerLayer(el2).GetAdorners(el2); 
Assert.IsNull(adorner);

【问题讨论】:

  • 让人头疼:这不是单元测试。它更像是一个集成测试,因为要进行此类测试涉及大量的事情。

标签: c# wpf unit-testing uielement


【解决方案1】:

按钮不一样,但最后你测试的好像它们是一样的。第一个按钮与它没有任何关系。删除它,然后测试装饰层是否为空。

【讨论】:

  • 我想我可以这样做: Adorner[] adorner = AdornerLayer.GetAdornerLayer(el2).GetAdorners(el2); Assert.IsNull(装饰器);
  • 您正在清除图层,这就是您应该测试的内容。另一个按钮根本不需要。
  • 是的,这是有道理的。我之前发布的代码有效并且测试通过了。感谢您的帮助。
猜你喜欢
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2011-04-12
相关资源
最近更新 更多