"Hello World" - TDD方式?

abh*_*ash 14 c# tdd nunit unit-testing

自从我被介绍到TDD以来,我一直在思考这个问题.哪个是构建"Hello World"应用程序的最佳方式?这将在控制台上打印"Hello World" - 使用测试驱动开发.

我的测试会是什么样子?什么课程?

请求:没有" 维基百科 "链接到TDD是什么,我熟悉TDD.只是好奇如何解决这个问题.

Ste*_*ger 21

您需要在界面后面隐藏控制台.(无论如何,这可能被认为是有用的)

写一个测试

[TestMethod]
public void HelloWorld_WritesHelloWorldToConsole()
{
  // Arrange
  IConsole consoleMock = MockRepository.CreateMock<IConsole>();

  // primitive injection of the console
  Program.Console = consoleMock;

  // Act
  Program.HelloWorld();

  // Assert
  consoleMock.AssertWasCalled(x => x.WriteLine("Hello World"));
}
Run Code Online (Sandbox Code Playgroud)

写程序

public static class Program
{
  public static IConsole Console { get; set; }

  // method that does the "logic"
  public static void HelloWorld()
  {
    Console.WriteLine("Hello World");
  }

  // setup real environment
  public static void Main()
  {
    Console = new RealConsoleImplementation();
    HelloWorld();
  }
}
Run Code Online (Sandbox Code Playgroud)

重构更有用的东西;-)


dus*_*ell 5

嗯......我没见过你好世界的TDD版本.但是,要看到一个类似于TDD和可管理性的简单问题,您可以查看Enterprise FizzBu​​zz(代码).至少这将使您能够看到在hello世界中可能实现的过度工程化水平.


Len*_*ert 5

演讲者视图?(模型似乎没有必要)

View将是一个将输出传递给控制台的类(简单的单行方法)

Presenter是调用view.ShowText("Hello World")的接口,您可以通过提供存根视图来测试它.

为了提高工作效率,我只想写该死的程序:)

单个测试应该足够(在伪代码中):

IView view = Stub<IView>();
Expect( view.ShowText("Hello World") );

Presenter p = new Presenter( view );
p.Show();

Assert.IsTrue( view.MethodsCalled );
Run Code Online (Sandbox Code Playgroud)