Если Вы задаетесь вопросом конкретно о примерах в FAQ JUnit, такой как шаблон базового теста , я думаю лучшая практика, представляемая существует то, что класс под тестом нужно инстанцировать в Вашем методе установки (или в методе тестирования).
, Когда примеры JUnit создают ArrayList в методе установки, они все продолжают тестировать поведение что ArrayList, со случаями как testIndexOutOfBoundException, testEmptyCollection, и т.п.. Перспектива там имеет кого-то пишущего, что класс и удостоверяющийся его работает правильно.
необходимо, вероятно, сделать то же при тестировании собственных классов: создайте свой объект в установке или в методе тестирования, так, чтобы Вы смогли получить разумный вывод при повреждении его позже.
, С другой стороны, при использовании класса набора Java (или другого класса библиотеки, в этом отношении) в тестовом коде, это, вероятно, не потому что Вы хотите протестировать его - это - просто часть тестового приспособления. В этом случае можно безопасно предположить, что это работает, как предназначено, так инициализация его в объявлении не будет проблемой.
Если это имеет значение, я продолжаю работать довольно большое, несколько-лет, разработанная из TDD кодовая база. Мы обычно инициализируем вещи в их объявлениях в тестовом коде, и в году с половиной, что я был на этом проекте, он никогда не вызывал проблему. Таким образом, существует по крайней мере некоторая неподтвержденная информация, что это - разумная вещь сделать.
реализуют шаблон Singleton
пример: CodeProject: простые одиночные формы (хорошо, это в VB.NET, но просто чтобы дать вам подсказку)
Да, у него есть одноэлементный шаблон,
Код для создания одноэлементного объекта,
public partial class Form2 : Form
{
.....
private static Form2 inst;
public static Form2 GetForm
{
get
{
if (inst == null || inst.IsDisposed)
inst = new Form2();
return inst;
}
}
....
}
Вызвать / показать эту форму,
Form2.GetForm.Show();
Если в вашей системе есть возможность отображать формы одного и того же типа для разных данных экземпляра, вы можете создать систему проверки, которая выполняет итерацию всех существующих открытых форм,
Вы можете проверить существующие процессы перед открытием формы:
using System.Diagnostics;
bool ApplicationAlreadyStarted()
{
return Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length == 0;
}
Я не знаю, влияет ли метод GetProcessesByName на UAC или другие меры безопасности.
Синглтоны не являются объектно-ориентированными. Это просто объектная версия глобальных переменных. Что вы можете сделать, так это сделать конструктор класса Form закрытым, так что никто не может случайно создать один из них. Затем вызовите отражение, преобразуйте ctor в public и убедитесь, что вы создали один и только один его экземпляр.