| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

Ich hab nach dem ich Code Coverage durchgefuehrt habe, heraus gefunden, dass die Codezeilen "get {return firstName}" und "get {return lastName}" des unten abgebilden Codes nicht abgedeckt sind und ich habe keine Ahnung wie der Unit Test jetzt aussehen muesste :-(

Ich bin um jede Hilfe sehr sehr dankbar!!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SchoolModel
{
public class Applicant
{
private string firstName;
private string lastName;

public string FirstName
{
get { return firstName; }
set
{
if (value == "")
throw new Exception("First name may not be blank");
else
firstName = value;
}
}
public string LastName
{
get { return lastName; }
set
{
if (value == "")
throw new Exception("Last name may not be blank");
else
lastName = value;
}
}
}
}
News:
13.11.2012
girl2newyork 1 1
Nicht themenbezogen, ich wollts aber trotzdem ansprechen:
1. Du prüfst auf "" (Leerstring). Dafür gibt es das String.Empty ;) ist zwar kein Zwang, das zu nutzen, liest sich aber besser (vor Allem, da bei "" auch mal " " rauskommen kann, ohne dass es direkt bemerkt wird")
2. du prüfst value, aber nicht value.Trim(), denn "blank" wäre ja auch ein String der nur aus Leerzeichen besteht?
3. du prüfst nicht auf null! Ein String kann null sein, das solltest du bedenken ;)
Karill Endusa 14.11.2012
1
In dem Fall also am besten mit String.IsNullOrWhiteSpace(value) prüfen.
Xantiva 14.11.2012
Es wäre hilfreich, wenn Du Deinen bisherigen Test für die Property mit eingefügt hättest ...
(grr, zur früh abgesendet ;) )
Xantiva 14.11.2012
oder ((string == null) || (string.Trim() == string.Empty)), wenn .Net < 4.0 verwendet wird ;)
(Und bitte zuerst auf null, sonst kracht .Trim())

Andererseits:
Ich würde getrennt auf null und empty prüfen:
- null -> ArgumentNullException
- string.Empty -> ArgumentException

aber das is halt auch nur wieder ne Geschmackssache...
Karill Endusa 14.11.2012
1
Ich habe dafür eine eigene, statische ValidationRule erstellt, damit man das nur 1x schreibt ;) Die wirft dann die passende Exception.
IsRequiredRule.Validate(value, "First name");
firstname = value;
Xantiva 14.11.2012
Auch am Thema vorbei aber: Ich empfehle dir die Codeanalyse mit allen Microsoft Regeln zu aktivieren und StyleCop zu installieren und einzusetzen.
Beide Tools geben dir Warnungen, wenn du z.B. mit "" anstatt string.Empty verlgeichst, wenn du throw new Exception aufrufst anstatt throw new ArgumentException oder eine passendere.

Mir hilft der Einsatz der beiden Helferlein enorm, sauberen und Code zu schreiben.
Andreas Richter 14.11.2012
2 Antworten
1
Du mußt halt in irgendeiner Weise mal lesend auf die Property zugreifen. Z.B. indem Du LastName einen Wert zuweist und dann per Assertion prüfst, ob LastName tatsächlich diesen Wert hat.

Übrigens: man sollte immer spezialisierte Exceptions werfen, in Deinem Fall am besten eine ArgumentException.
14.11.2012
Matthias Hlawatsch 13,2k 4 9
respektive eine, wenn er dafür noch eine Prüfung einbaut, ArgumentNullException
Karill Endusa 14.11.2012
0
Warum initialisierst Du die Properties nicht über den Konstruktor?
Damit geht man auf alle Fälle sicher, dass hier Werte eingegeben werden (müssen). Die Setter können auch ruhig "private" gesetzt werden?
14.11.2012
lbm1305 849 1 8
lbm1305 849 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH