Tag: tdd

使用Moq和TDD,从哪里开始?

我有一个服务器应用程序,我想知道如果我想开始实现TDD和使用Moq我应该从哪里开始。 我能读到哪些关于这个主题的好书,哪些不太“面向网络”? 我对此事有疑问,例如: 我应该模拟我想要测试的每个对象,还是只有那些我无法实现的对象,比如文本编写者? 我的服务器需要进行大量的设置才能真正做我想测试的事情,我应该把它塞进[TestInitialize]函数吗? 如果我想测试更深入的function,我应该如何链接我的测试?

NUnit的Is.Equal对于从generics类派生的类不能可靠地工作吗?

今天我遇到了NUnit的以下问题。 我有一个类,派生自generics类。 我开始做一些序列化测试,并使用NUnit的Is.EqualTo()函数测试相等性。 当一个应该失败的测试通过时,我开始怀疑出现了问题。 当我使用obj1.Equals(obj2)而不是它应该失败时。 为了调查我创建了以下测试: namespace NUnit.Tests { using Framework; public class ThatNUnit { [Test] public void IsNotEqualTo_ClientsNotEqual_Passes() { var client1 = new DerrivedClient(); var client2 = new DerrivedClient(); client1.Name = “player1”; client1.SomeGenericProperty = client1.Name; client2.Name = “player2”; client2.SomeGenericProperty = client2.Name; Assert.That(client1.Equals(client2), Is.False); Assert.That(client1, Is.Not.EqualTo(client2)); } [Test] public void IsNotEqualTo_ClientsAreEqual_AlsoPasses_SomethingWrongHere() { var client1 = […]

当生产function可以有数百万个测试用例时,TDD如何工作?

在TDD中,您选择一个测试用例并实现该测试用例然后您编写足够的生产代码以便测试通过,重构代码并再次选择一个新的测试用例并继续循环。 我在这个过程中遇到的问题是TDD说你只编写了足够的代码来传递刚才写的测试。 我所指的确切地说,如果一个方法可以有100万个测试用例,你能做什么?! 显然没有写100万个测试用例?! 让我通过下面的例子更清楚地解释一下我的意思: internal static List GetPrimeFactors(ulong number) { var result = new List(); while (number % 2 == 0) { result.Add(2); number = number / 2; } var divisor = 3; while (divisor <= number) { if (number % divisor == 0) { result.Add(divisor); number = number / divisor; } else { […]

使用文件IO的unit testing方法

我正在努力养成编写unit testing的习惯,我之前写过一些,但它们通常都很基础……我想开始转向TDD,因为我想提高质量我的代码(设计和结构) – 减少耦合,同时希望减少回归到可测试构建的回归数量。 我采取了一个相对简单的项目,我开始工作。 生成的程序监视文件夹,然后对该文件夹中的文件执行操作。 以下是从项目中提取的一些代码的典型示例: private string RestoreExtension(String file) { var unknownFile = Path.GetFileName(file); var ignoreDir = Path.GetDirectoryName(file) + “\\Unknown”; string newFile; //We need this library for determining mime if (CheckLibrary(“urlmon.dll”)) { AddLogLine(“Attempting to restore file extension”); var mime = GetMimeType(BufferFile(file, 256)); var extension = FileExtensions.FindExtension(mime); if (!String.IsNullOrEmpty(extension)) { AddLogLine(“Found extension: ” + […]

TDD新手:是否有示例应用程序进行测试以显示如何进行TDD?

我真的想进入TDD开发,但我没有参考从哪里开始。 我认为,查看代码并了解他们如何编写测试并使类可测试,以便我更容易消化并开始使用自己。 是否有人知道包含unit testing的任何样本或小型开源C#应用程序?

unit testingViewmodel

我是TDD的新手。 我已经开始在视图模型上创建我需要的属性作为普通的自动属性。 public string Firstname { get; set; } 然后我创建了一个测试 [TestMethod] [Tag(“Property”)] public void FirstNameTest() { ViewModel = new CustomerViewModel(); ViewModel.PropertyChanged += (s, e) => { Assert.AreEqual(“Firstname”, e.PropertyName); Assert.AreEqual(“Test”, ViewModel.Firstname); }; ViewModel.Firstname = “Test”; } 然后我会扩展实际的实现,使测试通过这样: public string Firstname { get { return _contact.FirstName; } set { if (_contact.FirstName == value) return; _contact.FirstName = value; […]

TDD是否意味着不考虑课堂设计?

我正在制作角色扮演游戏以获得乐趣并尝试在开发时使用TDD。 我看到的许多TDD示例都侧重于首先创建测试,然后创建使测试通过所需的对象。 例如: [Test] public void Character_WhenHealthIsBelowZero_IsDead() { // create default character with 10 health Character character = new Character(); character.SubtractHealth(20); Assert.That(character.IsAlive, Is.EqualTo(false)); } 所以基于此我将创建字符类和适当的属性/方法。 这似乎很好,但我的class级设计真的应该不断改进我的测试吗? 这比制定我的游戏提前需要的可能对象更好吗? 例如,我通常会想到一个基本的Character类,然后是子类,例如Wizard,Fighter,Theif。 或者是一种平衡的方法? 我在哪里绘制出我需要的可能的类和层次结构,但首先编写测试以validation它们实际上是否需要?

C#用于检查属性的扩展方法

对不起,如果这是一个愚蠢的菜鸟问题,请温柔地对待我,我正在努力学习…… 我想测试模型和控制器之类的属性方法。 主要是为了确保他们有正确的属性,即必需。 但我也将它用作扩展方法和Lambdas的实验。 我想要的是一种方法,当被称赞时看起来有点像 Controller controller = new Controller(); controller.MethodName(params).HasAttribute(); 我尝试了一些扩展方法,但没有达到这个程度。我确信这应该很简单,但似乎无法使我的generics等正确。

使用Moq,如何使用输入参数设置方法调用作为具有预期属性值的对象?

使用Moq,如何使用输入参数设置方法调用作为具有预期属性值的对象? var storageManager = new Mock(); storageManager.Setup(e => e.Add(It.IsAny())); Add()方法需要具有FirstName属性的UserMetaData对象。 我想确保传递了具有FirstName为“FirstName1”的UserMetaData类型的对象。

如何处理TDD中的接口过度使用?

我注意到,当我在做TDD时,它经常导致非常大量的接口。 对于具有依赖项的类,它们以通常的方式通过构造函数注入: public class SomeClass { public SomeClass(IDependencyA first, IDependency second) { // … } } 结果是几乎每个类都将实现一个接口。 是的,代码将被解耦并且可以非常容易地进行单独测试,但是也会有额外的间接级别让我感到有点……不安。 有些事情感觉不对劲。 任何人都可以分享其他不涉及如此大量使用接口的方法吗? 你们其他人怎么样?