W moim programie testowym w Nunit, chcę sprawdzić, czy otrzymuje on wyjątek argumentu Argument, sprawdzając komunikat.Sprawdzanie wyjątku ArgumentException i jego komunikatu w Nunit, C#
[Test]
public void ArgumentsWorkbookNameException()
{
const string workbookName = "Tester.xls";
var args = new[] { workbookName, "Sheet1", "Source3.csv", "Sheet2", "Source4.csv" };
Assert.Throws(typeof(ArgumentException), delegate { var appargs = new ApplicationArguments(args); }, "Invalid ending parameter of the workbook. Please use .xlsx");
}
Po przetestowaniu tego nie działa, gdy zmodyfikowałem komunikat w programie głównym.
int wbLength = args[0].Length;
// Telling the user to type in the correct workbook name file.
if (args[0].Substring(wbLength-5,5)!=".xlsx")
{
throw new ArgumentException(
"Invalid ending parameter of the workbook. Please use .xlsx random random");
}
Test urządzenia nadal przebiegał pomyślnie, niezależnie od tego, czy zmieniłem komunikat.
Jak to zrobić? Czy nie ma takich rzeczy w języku C#. Mój kolega powiedział, że są takie opcje w Ruby i RSPEC, ale nie jest w 100% pewny w C#.
ale czy nie warto zweryfikować, sprawdzając wiadomość, że wyjątek testujesz jest jeden chcesz, a nie inny w inny punkt twojego kodu? Jeśli ten sam typ wyjątku, ale z innego miejsca, może twój kod robi coś, czego nie chcesz. – Riga
@Riga: Możesz, jeśli chcesz - ale nie uważam, żeby to było warte mojego czasu. Lubię addaż "testu, aż strach zamieni się w nudę". Byłbym bardzo znudzony testowaniem * dokładnego * komunikatu wyjątku, a następnie zmienianie testów za każdym razem, gdy chciałem uczynić ten wyjątek bardzo nieznacznie bardziej informatywnym itd. Więc chociaż nie uważam tego za użyteczny, twój przebieg może się różnić . –
Alternatywą jest przechowywanie stałych we wspólnej lokalizacji lub klasie, a kod produkcyjny i testowy muszą wskazywać to samo miejsce. Jeśli wiadomość musi się kiedykolwiek zmienić, po prostu zmień ją w tej jednej lokalizacji. – neverendingqs