单元测试帮助.如何测试输出到控制台的消息?

Hca*_*tek 8 c# tdd nunit

我是单元测试的新手.如何检查控制台输出?我有

namespace XXShapes
{
    public abstract class XXShape
    {
        public virtual void DrawXXShape()
        {
            Console.WriteLine("The XXShape was drawn.");

        }
    }

public class XXCircle : XXShape
{
    public override void DrawXXShape()
    {
        Console.WriteLine("The XXCircle was drawn.");
    }
}
Run Code Online (Sandbox Code Playgroud)

}

namespace XXShapes.Test
{
    [TestFixture]
    public class XXShapeTest
    {
        [Test]
        public void MyFirstTest()
        {
            XXShape s = new XXCircle();
            string expected = "The XXCircle was drawn.";
            s.DrawXXShape();
            string actual = Console.ReadLine();
            Assert.AreEqual(expected, actual);
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

我应该如何正确地测试这个?谢谢你的任何指示.干杯,〜ck

Ste*_*ham 14

字面上的答案是你Console.SetOut在调用被测试的类之前使用它来指向stdout一个memoryStream或类似的东西,你可以在以后检查它的内容.

更好的答案是使用一个模拟框架,比如Rhino Mocks来创建抽象类的具体实例,并期望设置该DrawXXShape方法将被调用.


Noo*_*ilk 0

那根本不是你会做的。

在测试中,您通常会检查对象的状态,例如:

Assert.IsTrue(foo.Field, Equals, "hello")
Run Code Online (Sandbox Code Playgroud)

取决于您选择的框架的工作方式。因此,一般来说,您需要改变您的方法以符合此模型。