Używam TestCaseSource na NUnit 2.6.1 do testowania tych samych Asserts z różnymi parametrami konstruktora klasy obiektów.
Mam na myśli,
[Test, TestCaseSource("myConstructorsForMale")}
public void CheckMale(Person p)
{
Assert.That(p.IsMale);
}
static Person[] myConstructorsForMale =
{
new Person("John"),
new Person(isMale=true),
new Person("Doe")
};
Ok, wszystko działa dobrze, ale taki wynik otrzymałem na konsoli NUnit:
- Sprawdź Male
- Sprawdź Mężczyzna (osoba)
- Sprawdź Mężczyzna (osoba)
- Sprawdź Mężczyzna (osoba)
Więc nie wiem, jaki test jest wykonywany w każdej iteracji, a jeśli którykolwiek z nich nie powiedzie się, nie mogę uzyskać tego, który test jest nieudany.
Moje pytanie brzmi: czy jest jakiś sposób na identyfikację z komentarzem lub czymś podobnym, jaki jest parametr przekazywany do testu? (w sposób TestCaseSource Attribute)
Dzięki.
2 odpowiedzi
Jeśli używasz „natywnego” NUnitor ReSharper jako biegacza testowego, możesz zastąpić metodę ToString
aby mieć dobre definicje Osoby. Na przykład Twój kod testowy może wyglądać tak:
public class PersonTests
{
[Test, TestCaseSource("myConstructorsForMale")]
public void CheckMale(Person p)
{
Assert.That(p.IsMale);
}
static Person[] myConstructorsForMale =
{
new Person("John"),
new Person{IsMale=true},
new Person("Doe")
};
}
Klasa osoby może wyglądać tak:
public class Person
{
public Person(string name)
{
this.Name = name;
}
public Person() { }
public string Name { get; set; }
public bool IsMale { get; set; }
public override string ToString()
{
return string.Format("Name:{0};IsMale:{1}", Name, IsMale);
}
}
Okno wyników będzie wyglądać tak:
Sprawdziłem to również na natywnym programie uruchamiającym testy NUnit, którego prawdopodobnie używasz. Ładnie wyświetla również osoby:
Riffing na odpowiedzi Ilyi Ivanov, jeśli nie chcesz modyfikować testowanej klasy tylko po to, aby ją przetestować, możesz umieścić logikę „to string” w urządzeniu testowym.
Dodaj metodę do urządzenia, taką jak:
IEnumerable<TestCaseData> PersonTestCases()
{
myConstructorsForMale.Select(
p => new TestCaseData(p).SetName(string.Format("Name:{0};IsMale:{1}" ,p.Name, p.IsMale));
);
}
To tworzy instancję TestCaseData
dla każdej Osoby z Twojej listy myConstructorsForMale
. Sztuczka polega na tym, że ustawia właściwość Name
instancji TestCaseData
, aby poinformować program uruchamiający test, co ma wyświetlić.
Niektórzy testerzy mogą działać lepiej z SetDescription
niż SetName
.
Następnie zmodyfikuj swój atrybut TestCaseSource
na:
[Test, TestCaseSource("PersonTestCases")]
Powinno to spowodować coś takiego:
- Sprawdź Male
- Imię:;IsMale:Prawda
- Imię:Kowalski;IsMęski:Fałsz
- Imię:Jan;IsMężczyzna:Fałsz
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.