#c# #unit-testing
#c# #модульное тестирование
Вопрос:
Как бы я написал метод [TestCleanup()] для этих [TestMethod()] .
У меня есть 11 из следующих:
При запуске по отдельности они проходят, когда не выполняются одновременно, проходят первые
[TestMethod()]
public void SplitTdsNameTest_SimpleValidName2()
{
string tdsName = "Mr Daniel George Trunley";
MemberName expected = new MemberName("Mr", "Daniel George", "Trunley");
MemberName actual;
actual = TdsTransformer.SplitTdsName(tdsName);
Assert.AreEqual(expected, actual);
}
[TestMethod()]
public void SplitTdsNameTest_SimpleValidName3()
{
string tdsName = "Daniel George Trunley";
MemberName expected = new MemberName("", "", "Daniel George Trunley");
MemberName actual;
actual = TdsTransformer.SplitTdsName(tdsName);
Assert.AreEqual(expected, actual);
}
Имя участника:
public struct MemberName
{
public string Title;
public string FirstNames;
public string LastNames;
public MemberName(string title, string firstNames, string lastNames)
{
Title = title;
FirstNames = firstNames;
LastNames = lastNames;
}
}
Разделение:
public MemberName SplitTdsName(string tdsName)
{
return NameSplitter.Splitter(tdsName);
}
Разделитель:
public static MemberName Splitter(string fullName)
{
nameInFull = fullName;
SetAllowedTitles();
SplitNamesAndRemovePeriods();
SetTitles();
MemberName splitName = new MemberName(titles, firstNames, lastNames);
return splitName;
}
Комментарии:
1.
TdsTransformer
это экземпляр или ссылка на класс (так что этоSplitTdsName
статический метод или метод экземпляра)?SplitTdsName
Сохраняются ли старые данные? Предоставили ли вы надлежащие реализации равенства внутриMemberName
? С учетом вашего редактирования недостаточно.2. @AnthonyPegram достаточно ли этой информации? Или это потребует большего?
3. Я согласен с Остином в его ответе, меня беспокоит статический метод и задействованное глобальное состояние. Я также беспокоюсь о структуре, ее изменчивости и т. Д. Я думаю, вам, вероятно, следует пересмотреть свой дизайн.
4. Я унаследовал этот дизайн и, к сожалению, не могу его изменить
Ответ №1:
Исходя из предоставленного, не похоже, что какая-либо очистка необходима.
Если есть TestInitialize
метод, просто отмените то, что там сделано.
Если TdsTransformer.SplitTdsName
сохраняется какое-либо внутреннее состояние, вам также придется его очистить. Хотя, если это так, это, вероятно, не должно быть статическим методом.
Основываясь на изменениях, эти два метода меня беспокоят:
SetAllowedTitles();
SetTitles();
Они подразумевают наличие внутреннего состояния, которое, на мой взгляд, очень плохо для статического класса. Вероятно, это проблема, с которой вы сталкиваетесь, когда последовательные тесты не проходят.
Чтобы исправить это и сохранить его статичным, пусть они возвращают значения вместо сохранения в статических элементах:
var allowedTitles = SetAllowedTitles(fullName);
var names = SplitNamesAndRemovePeriods(fullName); //likely a struct or class with first/last names
var titles = SetTitles(allowedTitles);