При использовании Swing , Swing ФЕСТИВАЛЯ полезен для управления GUI и тестирования утверждений. Это делает его довольно простым для тестирования вещей как , "если я нажимаю кнопку, диалоговое окно B должно быть отображено" или , "если я выбираю опцию 2 из выпадающего, все флажки должны стать невыбранными" .
сценарий графика, который Вы упоминаете, не настолько легко протестировать. Довольно легко получить покрытие кода для компонентов графического интерфейса пользователя только путем создания и отображения их (и возможно управления ими с ФЕСТИВАЛЕМ). Однако создание значимых утверждений является твердой частью (и покрытие кода без значимых утверждений является упражнением в самообмане). Как Вы тестируете это, график не был оттянут вверх тормашками или слишком маленький?
я думаю, что просто необходимо признать, что некоторые аспекты графический интерфейсов пользователя не могут быть протестированы эффективно автоматизированными модульными тестами и что необходимо будет протестировать их другими способами.
Единственный способ увидеть его полезность - это использовать статический метод в строковом классе, потому что, очевидно, он не могут быть отнесены к экземпляру, поскольку этот экземпляр имеет значение NULL, и это может вызвать ошибку времени выполнения.
Методы расширения C # 3.0 могут вызываться на приемниках NULL (поскольку на практике они статичны), но ведут себя как методы экземпляра. Так что просто сделайте это методом расширения.
Я не думаю, что для этого есть что-нибудь встроенное. Моя первая мысль, и то, что я делаю часто, - это использовать оператор объединения:
string s = null;
string x = s ?? string.Empty;
someExpressionInvolving (s ?? "");
Нет смысла волноваться по поводу string.Empty
vs ""
- есть незначительная разница:
Console.WriteLine(ReferenceEquals(string.Empty, "")); // true
Метод расширения:
public static class StringExtensions
{
public static String EmptyIfNull(this String instance)
{
return instance ?? String.Empty;
}
}
конечно, вы можете так же легко написать экземпляр ?? String.Empty
там, где вам нужно использовать String.Empty вместо null.
Вы можете использовать ?? Оператор (оператор объединения с нулем) в C # - это вы имеете в виду? Или я неправильно понял?
например.
string n = null;
string y = n ?? String.Empty;
y would = String.Empty;
Я бы сказал, что реализация этого метода расширения будет немного похожа на то, что мы в Швеции называем «путешествовать на другую сторону ручья за водой» . Когда мне нужно убедиться, что я получаю пустую строку вместо нуля, я часто просто объединяю ее с string.Empty
:
public void SomeMethod(string param)
{
string notNull = param + string.Empty;
}
Конечно, это может привести к созданию дополнительного экземпляра строки, но в большинстве случаев в реальном мире ситуации, в которых я бывал, не было проблемой.
Для этого нет встроенной функции. Но вы можете написать небольшой метод расширения (или статический метод) для строкового типа с такой инструкцией, как:
return s ?? string.Emtpy;
Просто добавьте string.Empty в любую строковую переменную, и вы гарантированно никогда не получите null
string a = null;
string b = null + string.Empty;
string c = "a" + string.Empty;
(a == string.Empty).Dump(); // False
(b == string.Empty).Dump(); // True
(c == "a").Dump(); // True
Я добавил это в LinqPad, отсюда .Dump ()
Глядя на ваши варианты ...
Этот метод
string b = null + string.Empty;
генерирует
IL_0001: ldsfld System.String.Empty
IL_0006: dup
IL_0007: brtrue.s IL_000F
IL_0009: pop
IL_000A: ldstr ""
IL_000F: stloc.0
Другой популярный вариант:
string b = null ?? string.empty
генерирует
IL_0001: ldsfld System.String.Empty
IL_0006: stloc.0
и этот
string b = null + "";
генерирует это
IL_0001: ldstr ""
IL_0006: stloc.0
Я все еще предпочитаю
string b = null + "";
Но на самом деле, ИМО,