2013-02-20 37 views
1

我无法从MSpec断言写入控制台。我使用Nuget的v0.5.11(无符号)。这里没有什么激进的,但它不起作用。任何人都知道我错过了什么?为什么Console.WriteLine不能在MSpec断言中工作?

public class When_doing_stuff 
{ 
    It should_out_stuff_to_console =() => 
    { 
     var val1 = 1; 
     var val2 = 2; 
     (val1 + val2).ShouldEqual(3); 
     Console.WriteLine(val2); 
    }; 
} 
+0

我ve得到了同样的问题,我在建立context =()=> {..}中输出东西,因为=()=> {...}。测试结束但没有写入输出。测试包含一个It,它通过。不过,我相信我在我的spec测试的基类中重定向/禁用了控制台输出。也许你也这样做了? 此外,即时通讯只通过Resharper运行规格测试,也许resharper亚军没有显示它。将在控制台中进行测试并回复给您。 – BatteryBackupUnit 2013-02-27 12:38:02

+0

Resharper 7.1 + Mspec runner 0.5.11。 MSpec 0.5.11 nuget包。 Resharper亚军不显示控制台输出,但控制台亚军。 – BatteryBackupUnit 2013-02-27 12:46:27

回答

2

我怀疑你的实际代码中实际上有一个失败的断言。你发布了一个传递断言,应该打印得很好(因为Alexander和我都在本地进行了验证)。

然而,一个失败的断言将抛出一个SpecificationExceptionConsole行永远不会执行。你应该在你的断言之前打印。例如

It should_out_stuff_to_console =() => 
{ 
    Console.WriteLine(val2); 
    (val1 + val2).ShouldEqual(3); 
} 

而且从mspec命令行亚军

cmd> mspec-clr4.exe test.dll 

Specs in test: 

When doing stuff 
Blah 
» should out stuff to console 

但是,我不建议从你的说法,或在一般的测试运行打印调试语句到控制台输出。它会砸毁测试报告(正如你上面看到的)。

+0

谢谢你们,我在用resharper跑,还没有尝试过。 Trite示例,但我试图从调试控制台获取某些内容。写入控制台是暂时的,但我会尝试。 – 2013-06-12 13:52:50

0

其实没有什么错在这里断言,安东尼:-)

我贴贴到一个新的类库代码user287079,看看什么东西被印在了我的控制台:

>mspec-clr4 <somewhere>\bin\Debug\ClassLibrary1.dll 

Specs in ClassLibrary1: 

When doing stuff 
2 
» should out stuff to console 


Contexts: 1, Specifications: 1, Time: 0.11 seconds 
+0

哦,是的,正如书面它不是一个问题。我怀疑他的实际问题是一个失败的断言。我认为这个帖子并没有忠实地重现真正的问题。 (我更新了我的答案,对于混淆抱歉) – 2013-02-20 21:46:41

相关问题