2011-01-13 101 views
1

如果我有一个像下面这样的实用方法,我该如何对它进行单元测试?似乎如果我想确定输出是正确的,我将不得不将代码构建到测试方法中?我可以看到是否有条件逻辑,如输入字符串是否为空返回null,但测试正确的输出似乎很棘手。单元测试实用程序方法

public static string EncodeTo64(string input) 
{ 
    byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(input); 
    string returnValue = System.Convert.ToBase64String(b); 
    return returnValue; 
} 
+2

“它好像如果我想要确定输出是正确的,我将不得不将代码构建到测试方法中。“ - 有一所TDD学校说你应该对所有的单元测试都这样做;在测试中编写产生所需结果的代码,然后将逻辑重构为实用方法。它更多是这个概念的教学工具,但在这种情况下尤其有效。 – KeithS 2011-01-13 20:40:05

回答

5

我会测试它通过输入一个值我知道正确的输出。要么通过事先计算,要么将其与已知值进行比较。你可能能够自己计算一个短串的输出。

此外,我会测试像空值和空字符串的边界条件的方法行为。

1

这取决于这个函数的“正确性”对于你来说是什么意思,开发者。我会将一个已知字符串转换为输出,根据任何标准对我进行验证,然后比较该函数的结果与我生成的结果相匹配。事情是这样的:

const string expectedBase64String = "abc123$$%++"; 
const string testString = "Not the base 64 source of above"; 

Assert.AreEqual(expected, Utility.EncodeTo64(testString)); 

你是正确的本质......你需要依靠比你的代码的行为等正确性一些其他的定义,除非你需要测试“,这是仍在生产我第一次运行它是什么“。

0

使用预先确定的输入和得到的正确输出,并与您的方法产生的结果进行比较。对多个输入/输出对执行此操作,以测试您的方法的整体正确性。

1

除了少数例外,你就不会在所有测试的输出,因为这是由另一单元中实现 - 在System.Convert类,并且它已经经过充分测试。

意义的编写文档时传递给它不同寻常的输入方法所做的测试:空,string.Empty,非ASCII编码字符串,等等。

+0

当然你应该测试输出。该方法可能有一个错误,如使用错误的编码 – 2011-01-13 20:04:50