Joe*_*ark 1 c# tdd unit-testing
static void Main(string[] args)
{
for (int i =1 ; i<=100;i++)
{
Console.WriteLine(i.ToString());
if (i % 3 == 0)
Console.WriteLine("HOON");
if (i % 5 == 0)
Console.WriteLine("Group");
if (i % 3 == 0 && i % 5 == 0)
Console.WriteLine("HOON Group");
}
}
Run Code Online (Sandbox Code Playgroud)
我需要使用上面的代码编写测试代码.
有三个功能.你能告诉我任何人吗?
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
}
}
Run Code Online (Sandbox Code Playgroud)
Ser*_*kiy 12
您无法从现有代码编写测试驱动代码,因为应在编写实现之前编写测试.
最简单的测试代码的方法是提供TextWriter模拟Console.Out和验证生成的输出.
更新:如果您想使用TDD,那么您应该修改您的代码以使其可测试.在这里,您的Program类可以处理许多事情 - 它负责表示(输出结果到控制台)和业务逻辑(计算值).要测试业务逻辑,您应该将此功能移至单独的类.
开始吧.第一次测试:
[Test]
public void ShoulReturnHoonWhenValueDivisibleOnlyBy3()
{
var hoonGroup = new HoonGroup();
string result = hoonGroup.Calculate(3);
Assert.AreEqual("HOON", result);
}
Run Code Online (Sandbox Code Playgroud)
它无法编译,因为你没有HoonGroup类.创建类,创建方法Calculate.使代码可编辑:
public class HoonGroup
{
public string Calculate(int value)
{
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
现在您的测试失败,因为您返回空字符串.只需硬编码"HOON"即可通过测试.这跟TDD一样好.
public class HoonGroup
{
public string Calculate(int value)
{
return "HOON";
}
}
Run Code Online (Sandbox Code Playgroud)
下一个测试:
[Test]
public void ShoulReturnGroupWhenValueDivisibleOnlyBy5()
{
var hoonGroup = new HoonGroup();
string result = hoonGroup.Calculate(5);
Assert.AreEqual("Group", result);
}
Run Code Online (Sandbox Code Playgroud)
当然,测试失败了.更新实施:
public class HoonGroup
{
public string Calculate(int value)
{
return (value == 5) ? "Group" : "HOON";
}
}
Run Code Online (Sandbox Code Playgroud)
看起来很蠢.但它实现了代码的所有要求.另一个测试:
[Test]
public void ShoulReturnNullWhenValueIsNotDivisibleBy3Or5()
{
var hoonGroup = new HoonGroup();
string result = hoonGroup.Calculate(5);
Assert.IsNull(result);
}
Run Code Online (Sandbox Code Playgroud)
没问题 - 添加另一个条件:
public class HoonGroup
{
public string Calculate(int value)
{
if (value == 3)
return "HOON";
if (value == 5)
return "Group";
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
测试通过.我们需要更多测试用例.使用NUnit很容易 - 只需用TestCase属性修饰第一个测试(MSTest也有类似功能):
[TestCase(3)]
[TestCase(6)]
[TestCase(99)]
public void ShoulReturnHoonWhenValueDivisibleOnlyBy3(int value)
{
var hoonGroup = new HoonGroup();
string result = hoonGroup.Calculate(value);
Assert.AreEqual("HOON", result);
}
Run Code Online (Sandbox Code Playgroud)
现在更容易创建代码,检查值是否可被3整除,然后列出所有可能的值:
public class HoonGroup
{
public string Calculate(int value)
{
if (value % 3 == 0)
return "HOON";
if (value == 5)
return "Group";
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我想你得到了TDD的观点和要点.为可被5整除的值创建更多测试用例,并为可被3和5整除的值写入测试.
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |