我有一个静态类Cryptographic
,可以Encypt
和Decrypt
一个字符串。我已经为此写了以下规范:
[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_a_string
{
Establish context = () => { input = "teststring"; };
Because of = () =>
{
output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
};
It should_decrypt_what_was_encrypted = () => input.ShouldEqual(output);
static string input;
static string output;
}
[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_an_empty_string
{
Establish context = () => { input = string.Empty; };
Because of = () =>
{
output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
};
It should_decrypt_what_was_encrypted = () => input.ShouldEqual(output);
static string input;
static string output;
}
[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_a_null_string
{
Establish context = () => { input = null; };
Because of = () =>
{
output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
};
It should_decrypt_what_was_encrypted = () => input.ShouldEqual(output);
static string input;
static string output;
}
这是一个干净的BDD单元测试吗?有什么可以改进的吗? 我方面的一些担忧:
Encrypt
中同时拥有Decrypt
和Because
。 Behaves
条款?我的意思是可读性现在非常理想
但可维护性不是。如果我优化可维护性(DRY)我
可能会以可读性进行交易。你会如何为此编写测试/规格?
答案 0 :(得分:1)
这个单元测试看起来是一个很好的起点。我想知道如果我实施Encrypt
和Decrypt
以便它只返回其各自的input
,它是否会中断。目前,没有必要加密任何让我想知道测试或生产代码是否已经首先编写的东西。
作为一般规则,如果您需要测试输入和输出对,我建议您查看NUnit的TestCase
等。人。 BDD作为一种工具尤其有意义,但并不仅限于指定系统行为。您在这里介绍的是一个不与系统的任何其他部分交互的单个类。虽然我理解BDD和上下文/规范风格可能有助于表达预期的单元行为,但有时经典单元测试框架更有意义。如果您需要对输入和输出元组进行测试运行,则尤其如此。