Tag: 断言

断言列表中字段的唯一性

我在C#中创建了一个列表,我想进行测试,看看Id字段的所有值是否都是唯一的。 public static List _reviews = new List { new RestaurantReview { Id = 1, Name = “McDonalds”, }, new RestaurantReview { Id = 2, Name = “Burger King”, }, } 因为我做了一些调试,我发现它正在通过列表运行,但我没有得到正确的测试值。 有人可以解释我在这里做错了吗? [TestMethod()] public void CheckReviewIds() { var FirstReview = ReviewsController._reviews.First(); bool AllUniqueIds = ReviewsController._reviews.All(s => s.Id == FirstReview.Id); Assert.IsFalse(AllUniqueIds); } 提前致谢。

Try..Catch块中的断言被捕获

刚刚遇到一些有趣的行为 – 被Catch块捕获的Assert 。 List consArray = new List(); try { Decimal d; Assert.IsTrue(Decimal.TryParse(item.Value, out d)); consArray.Add(d); } catch (Exception e) { Console.WriteLine(item.Value); Console.WriteLine(e); } 断言抛出AssertFailedException并将其catch 。 一直以为如果Assert失败,那么测试失败并且连续执行被中止。 但在那种情况下 – 测试继续进行。 如果以后没有发生任何错误 – 我得到绿色测试! 从理论上讲 – 这是正确的行为吗? 编辑:我明白这可能是.NET限制以及如何在MsTest中进行断言。 断言抛出exception。 因为catch – 捕获它所捕获的一切断言exception。 但理论上是正确的还是具体的MsTest?

断言比较两个对象列表C#

我目前正在尝试学习如何使用unit testing,并且我已经创建了3个动物对象的实际列表以及3个动物对象的预期列表。 问题是我如何断言检查列表是否相等? 我尝试过CollectionAssert.AreEqual和Assert.AreEqual,但无济于事。 任何帮助,将不胜感激。 测试方法: [TestMethod] public void createAnimalsTest2() { animalHandler animalHandler = new animalHandler(); // arrange List expected = new List(); Animal dog = new Dog(“”,0); Animal cat = new Cat(“”,0); Animal mouse = new Mouse(“”,0); expected.Add(dog); expected.Add(cat); expected.Add(mouse); //actual List actual = animalHandler.createAnimals(“”,””,””,0,0,0); //assert //this is the line that does not evaluate […]

c# – 使用OR条件断言

我正在检查三个字符的字符串 Assert.AreEqual(myString.Substring(3,3), “DEF”, “Failed as DEF was not observed”); 事情在这里它可以是DEF或RES ,现在处理这个我能想到的是以下 bool check = false; if( myString.Substring(3,3) == “DEF” || myString.Substring(3,3) == “RED” ) check = true; Assert.IsTrue(check,”Failed”); Console.WriteLine(“”Passed); 有一种方法我可以在Assert中使用一些OR事物 ps我正在编写unit testing,是的,我将使用三元运算符代替….

Trace.Assert没有破坏,也没有显示消息框

我有一个WPF应用程序,我在Canvas上移动数据。 当我尝试使用鼠标像怪物一样移动数据时,问题就出现了。 这是动作的顺序: 将触发canvas上的MouseMove 在MouseMove中,我更改了一些数据 一个Trace.Assert失败。 调试器不会中断,消息框也不会中断 另一个MouseMove被触发 数据再次更改 由于集合中的重入检查而抛出exception。 调试器打破了。 从未显示Assert消息框。 这里的一个大问题是我可以回到断言,但它不是断言失败时的数据,而是最后修改过的数据……所以基本上我无法正确调试。 这是堆栈跟踪,从第一个MouseMove开始(注意ShowMessageBoxAssert以及它仍在继续……): .Models.FCurve.MoveKey(int keyIndex = 3,double keyTime = 1182.0)第199行C#.Models.FCurve.KeyTimeChanged(Models.FCurveKey timeChangeKey = {Models.FCurveKey})第186行+ 0x2d字节C#.Models.FCurve.AddKeyToArray .AnonymousMethod(object sender = {Models.FCurveKey},System.EventArgs args = {System.EventArgs})第163行+ 0x11字节C#[本机到托管转换] [管理到本机转换] .Models.FCurveKey.OnTimeChanged()行45 + 0x14字节C#.Models.FCurveKey..ctor.AnonymousMethod(object sender = {FCurveEditorTestApp.Impl.FCurveKeyImpl},System.EventArgs args = {System.EventArgs})第18行+ 0x8字节C#[本机到托管转换] [管理到本机转换] FCurveEditorTestApp.exe!FCurveEditorTestApp.Impl.FCurveKeyImpl.OnTimeChanged()第43行+ 0x14字节C#FCurveEditorTestApp.exe!FCurveEditorTestApp.Impl.FCurveKeyImpl.Time.set(double value = 1182.0)第34行+ 0x8字节C#。 Models.FCurveKey.Time.set(double value = 1182.0)第36行+ […]

NUnit嵌套集合比较

是否有类似于CollectionAssert.AreEquivalent()的东西适用于嵌套集合? 以下代码…… CollectionAssert.AreEquivalent ( new Dictionary<int, Dictionary> { { 1, new Dictionary { { 10, “foo” }, { 11, “bar” }, { 12, “spam” } } }, { 2, new Dictionary { { 20, “eggs” }, { 21, “eels” } } }, { 3, new Dictionary { { 30, “hovercraft” } } } }, new […]

断言调试器断言失败

当assertion为false并使用Visual Studio调试器运行应用程序时,有没有办法打破调试器。 早些时候,当我调试Windows应用程序时,我会得到一个exception并且调试器会中断,但是现在在智能设备上,断言失败窗口会显示堆栈跟踪,但我还希望看到变量值等。

如何断言两个列表包含NUnit中具有相同公共属性的元素?

我想声明两个列表的元素包含我期望的值,如: var foundCollection = fooManager.LoadFoo(); var expectedCollection = new List() { new Foo() { Bar = “a”, Bar2 = “b” }, new Foo() { Bar = “c”, Bar2 = “d” } }; //assert: I use AreEquivalent since the order does not matter CollectionAssert.AreEquivalent(expectedCollection, foundCollection); 但是上面的代码不起作用(我猜是因为.Equals()对于具有相同值的不同对象不返回true)。 在我的测试中,我只关心公共属性值,而不关心对象是否相等。 我该怎么做才能做出我的断言?

C#编译器如何在发布版本中删除Debug.Assert?

我最近经历了一些代码并考虑是否需要小心处理Debug.Assert语句中的表达式,例如昂贵的操作或带有副作用的表达式。 但是,看起来编译器非常聪明地完全删除了Assert语句和内部表达式。 例如,以下内容仅在调试版本上打印: static void Main(string[] args) { Debug.Assert(SideEffect()); } private static bool SideEffect() { Console.WriteLine(“Side effect!”); return true; } 这会抱怨在发布版本初始化之前正在使用o : static void Main(string[] args) { object o; Debug.Assert(Initialize(out o)); o.ToString(); } private static bool Initialize(out object o) { o = new object(); return true; } 它甚至可以表达这样的表达(在两种情况下都打印“After”): static void Main(string[] args) { if (false) […]

对于C#中byte 类型的键,为什么Hashtable不会为“ContainsKey”返回true?

请考虑以下代码: byte[] bytes = new byte[] { 1, 2, 5, 0, 6 }; byte[] another = new byte[] { 1, 2, 5, 0, 6 }; Hashtable ht = new Hashtable(); ht.Add(bytes, “hi”); Assert.IsTrue(ht.ContainsKey(another)); 为什么这个断言失败了? 作为基本类型的数组不应该使用对象引用,是吗? 那么为什么它会返回假? 我可以做些什么来使这个哈希表工作吗?