Основные методы должны быть очень тонкими и просто заставляют мяч двигаться. Следовательно вообще не проверено.
например .net Winforms app Основной метод может содержать
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainWindow());
}
Если ваш метод main выполняет много задач, рассмотрите возможность его извлечения (в случае необходимости, в новый класс). например как показано ниже ... (у меня нет под рукой JavaIDE .. следующий код .net должен легко переводиться)
static void Main()
{
new MainApp().Run();
}
Теперь, если Run может быть проверен. Main тоже покрыт. Давайте посмотрим на MainApp. Рефакторинг 2 задач запуска сервера и протоколирование результата как 2 метода.
public class MainApp
{
private Server m_Server;
public MainApp():this(new Server())
{}
public MainApp(Server s)
{ m_Server = s; }
public void Run()
{ Log(LaunchServer()); }
private string LaunchServer()
{ return (m_Server.start() ? "started" : "failed"); }
protected virtual void Log(string sMessage)
{ System.Console.WriteLine(sMessage); }
}
Теперь давайте посмотрим на тестовый код ... Я буду использовать трюк "подкласс и переопределение", чтобы кэшировать результат, как показано ниже. (Вы также можете использовать Mocks .. по вкусу)
public class FakeApp : MainApp
{
private string sLastLoggedMessage;
public FakeApp(Server s) : base(s) { }
public string getLastLoggedMessage()
{ return sLastLoggedMessage; }
protected override void Log(string sMessage)
{ sLastLoggedMessage = sMessage; }
}
тест теперь тривиален
[TestFixture]
public class TestMainApp
{
[Test]
public void TestRun()
{
Server s = new Server();
FakeApp f = new FakeApp(s);
f.Run();
Assert.AreEqual("started", f.getLastLoggedMessage());
}
}
если вы не можете принудительно заставить Server.start () выполнить или потерпеть неудачу по своему желанию .. Вы можете создать подкласс FakeServer .. и переопределить start () для возврата фиксированных значений.
Если метод что-то делает, его можно проверить. Если это не так, он должен прекратить свое существование. Перефразировать его. HTH