首先让我说我是单元测试的新手,这实际上是我第一次尝试这样做。
我正在开发一个应用程序,用户可以在其中添加元素到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);
答案 0 :(得分:2)
按钮不一样,但最后你正在测试它们。第一个按钮与它没有任何关系。删除它,然后测试装饰层是否为空。