2010-08-09 3 views
5

Ich habe in den letzten Monaten viel über TDD gelesen und bin dann zu einem einfachen Beispiel übergegangen. Ich bin mir einfach nicht sicher, ob ich in der Praxis nach den richtigen Dingen teste. Hier werden die Tests für eine benutzerdefinierte Daten Annotation zur Validierung von E-Mails:Neu bei TDD in asp.NET, bin ich auf dem richtigen Weg, Tests zu schreiben?

using System; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 

namespace MembershipTest.Tests 
{ 
    [TestClass] 
    public class CustomDataAnnotationsTest 
    { 
     [TestMethod] 
     public void CustomDataAnnotations_Email_ReturnTrueIfNull() 
     { 
      // Arrange 
      EmailAttribute attribute = new EmailAttribute(); 

      // Act 
      bool result = attribute.IsValid(null); 

      // Assert 
      Assert.AreEqual(true, result); 
     } 

     [TestMethod] 
     public void CustomDataAnnotations_Email_ReturnFalseIfInvalid() 
     { 
      // Arrange 
      EmailAttribute attribute = new EmailAttribute(); 

      // Act 
      bool result = attribute.IsValid("()[]\\;:,<>@example.com"); 

      // Assert 
      Assert.AreEqual(false, result); 
     } 

     [TestMethod] 
     public void CustomDataAnnotations_Email_ReturnTrueIfValid() 
     { 
      // Arrange 
      EmailAttribute attribute = new EmailAttribute(); 

      // Act 
      bool result = attribute.IsValid("[email protected]"); 

      // Assert 
      Assert.AreEqual(true, result); 
     } 
    } 
} 

Und hier wird der nachfolgende Code für den Test geschrieben:

using System; 
using System.ComponentModel.DataAnnotations; 
using System.Net.Mail; 

public class EmailAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     //Let RequiredAttribute validate whether the value is required or not. 
     if (value == null) 
     { 
      return true; 
     } 

     //Check to see if System.Net.Mail can send to the address. 
     try 
     { 
      var i = new MailAddress(value.ToString()); 
     } 
     catch (Exception) 
     { 
      return false; 
     } 

     return true; 
    } 

} 

Alle Tests zunächst nicht und es gelang ihm dann nach den Code zu schreiben, aber sind die Tests angemessen geschrieben? Zu viel oder zu wenig? Ich weiß, dass dies ein sehr einfaches Beispiel ist, aber ich möchte sicherstellen, dass ich auf dem richtigen Weg bin, bevor ich zu komplizierteren Dingen übergehe.

+0

Vielleicht total offtopic, aber ich werde es trotzdem sagen: Dump die VS-integrierte Test-Zeug und NUnit stattdessen. Wie MSBuild vs NAnt bietet VSTS nicht die Bandbreite an Funktionalität und Flexibilität, die Sie in NUnit finden. Abgesehen davon denke ich, dass Sie das richtig nähern. – kprobst

+5

Es ist in der Tat total offtopic :) Ich denke, es ist eine Frage der persönlichen Vorliebe. Ich benutze die Visual Studio Test-Tools, und sie funktionieren sehr gut für mich, alle in VS integriert. – Cocowalla

+1

@Coco: Sie integrieren sich auch gut in TFS. –

Antwort

6

Ich denke, Sie sind auf dem richtigen Weg. An dieser Stelle würde ich ein Refactoring in Ihren Tests vorschlagen. Da Sie in jedem Test

EmailAttribute attribute = new EmailAttribute(); 

verwenden. Ich würde vorschlagen, TestInitialize() und TestCleanup() Methoden zu erstellen. Das TestInitialize würde neues EmailAttribute und das TestCleanup würde das Objekt aufheben. Dies ist nur eine Frage der Präferenz. So ist das

+0

Toller Punkt, gehen mit SetUp/TearDown ist definitiv eine gute Praxis :) – wintermute

+3

Ihr Punkt ist sehr gültig, aber mit den Visual Studio-Unit-Test-Tools, denke ich, dass diese Attribute "TestInitialize" bzw. "TestCleanup" sein sollten Sie haben für NUnit verwendet): D – Cocowalla

+0

Danke Cocowalla. Ich habe die Attributnamen geändert. – mpenrow

Verwandte Themen