TDD结构

TDD(Test-Driven Development,测试驱动开发),核心思想是先写测试,再写代码
这次我们将通过fizzbuzz这个例子来辅助理解

红绿结构

1.红(red):即编写一个错误的测试用例,先写测试代码,此时由于没有实现对应的功能,测试失败,变为红色。
2.绿(green):即编写一个正确的测试用例,此时实现了对应功能,测试成功,变为绿色。
3.重构(refactor):在不改变代码功能的前提下,优化代码结构,同时保持测试通过。

fizzbuzz函数的编写

头文件

fizzbuzz.h

1
2
3
#pragma once
#include <string>
std::string fizzBuzz(int value);

cpp文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "pch.h" //后面解释
#include <iostream>
#include "fizzbuzz.h"
#include <string>


using namespace std;

std::string fizzBuzz(int value) {
if (value % 3 == 0 && value % 5 == 0) {
return "FizzBuzz";
}
else if (value % 3 == 0) {
return "Fizz";
}
else if (value % 5 == 0) {
return "Buzz";
}
else {
return std::to_string(value);
}
}


int main()
{
int value;
cin >> value;
cout << fizzBuzz(value) << endl;
return 0;
}

测试用例的编写

vs2022中的测试管理系统

1.fizzbuzz_test.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "pch.h" //预编译头文件
#include "fizzbuzz.h"
#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace fizzbuzztest
{
TEST_CLASS(fizzbuzztest)
{
public:

TEST_METHOD(TestMethod1)
{
Assert::AreEqual(std::string("1"), fizzBuzz(1));
}
TEST_METHOD(TestMethod2)
{
Assert::AreEqual(std::string("2"), fizzBuzz(2));
}
TEST_METHOD(TestMethod3)
{
Assert::AreEqual(std::string("Fizz"), fizzBuzz(3));
}
TEST_METHOD(TestMethod4)
{
Assert::AreEqual(std::string("4"), fizzBuzz(4));
}
TEST_METHOD(TestMethod5)
{
Assert::AreEqual(std::string("Buzz"), fizzBuzz(5));
}
TEST_METHOD(TestMethod6)
{
Assert::AreEqual(std::string("Fizz"), fizzBuzz(6));
}
TEST_METHOD(TestMethod7)
{
Assert::AreEqual(std::string("7"), fizzBuzz(7));
}
TEST_METHOD(TestMethod8)
{
Assert::AreEqual(std::string("8"), fizzBuzz(8));
}
TEST_METHOD(TestMethod9)
{
Assert::AreEqual(std::string("Fizz"), fizzBuzz(9));
}
TEST_METHOD(TestMethod10)
{
Assert::AreEqual(std::string("Buzz"), fizzBuzz(10));
}
TEST_METHOD(TestMethod11)
{
Assert::AreEqual(std::string("11"), fizzBuzz(11));
}
TEST_METHOD(TestMethod12)
{
Assert::AreEqual(std::string("Fizz"), fizzBuzz(12));
}
TEST_METHOD(TestMethod13)
{
Assert::AreEqual(std::string("13"), fizzBuzz(13));
}
TEST_METHOD(TestMethod14)
{
Assert::AreEqual(std::string("14"), fizzBuzz(14));
}
TEST_METHOD(TestMethod15)
{
Assert::AreEqual(std::string("FizzBuzz"), fizzBuzz(15));
}


};
}

2.pch.h

1
2
3
4
5
6
#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头

#endif

3.pch.cpp

1
2
#include "pch.h"
// 当使用预编译的头时,需要使用此源文件,编译才能成功。

用例运行

在vs2022页面上面找到测试,点击,出现测试资源管理器,点击,出现一个绿色小三角,点击旁边的白色倒三角,出现运行全部测试用例,接着点击即可。
过一会就会出现测试通过的界面了~
示例图片