dev*_*ium 14 c# java tdd unit-testing
我正在用TDD做我的第一步.问题是(可能每个人都以TDD开头),当我开始在我的项目中工作时,我从来不知道要做什么样的单元测试.
让我们假设我想用以下方法编写一个Stack类(我选择它,因为它是一个简单的例子):
Stack<T>
- Push(element : T)
- Pop() : T
- Peek() : T
- Count : int
- IsEmpty : boolean
Run Code Online (Sandbox Code Playgroud)
你怎么会这样?我从来没有理解这个想法是为Stack类的每个方法测试一些极端情况,还是从类中做一些"用例"开始,比如添加10个元素并删除它们.这个想法是什么?要使使用Stack的代码尽可能接近我在实际代码中使用的代码?或者只是简单地"添加一个元素"单元测试,我测试IsEmpty和Count是否通过添加该元素进行了测试?
我该如何开始呢?
这是我粗略测试的实现:
[TestMethod]
public void PushTests() {
StackZ<string> stackz = new StackZ<string>();
for (int i = 0; i < 5; ++i) {
int oldSize = stackz.Size;
stackz.Push(i.ToString());
int newSize = stackz.Size;
Assert.AreEqual(oldSize + 1, newSize);
Assert.IsFalse(stackz.IsEmpty);
}
}
[TestMethod, ExpectedException(typeof(InvalidOperationException))]
public void PeekTestsWhenEmpty() {
StackZ<double> stackz = new StackZ<double>();
stackz.Peek();
}
[TestMethod]
public void PeekTestsWhenNotEmpty() {
StackZ<int> stackz = new StackZ<int>();
stackz.Push(5);
int firstPeekValue = stackz.Peek();
for (int i = 0; i < 5; ++i) {
Assert.AreEqual(stackz.Peek(), firstPeekValue);
}
}
[TestMethod, ExpectedException(typeof(InvalidOperationException))]
public void PopTestsWhenEmpty() {
StackZ<float> stackz = new StackZ<float>();
stackz.Pop();
}
[TestMethod]
public void PopTestsWhenNotEmpty() {
StackZ<int> stackz = new StackZ<int>();
for (int i = 0; i < 5; ++i) {
stackz.Push(i);
}
for (int i = 4; i >= 0; ++i) {
int oldSize = stackz.Size;
int popValue = stackz.Pop();
Assert.AreEqual(popValue, i);
int newSize = stackz.Size;
Assert.AreEqual(oldSize, newSize + 1);
}
Assert.IsTrue(stackz.IsEmpty);
}
Run Code Online (Sandbox Code Playgroud)
关于它的任何更正/想法?谢谢
首先测试API的基本原理.
测试零元素.
测试一个元素:
测试> 1个元素:
这些中的每一个都至少是一个测试用例.
例如(在Google的c ++单元测试框架中大致概述):
TEST(StackTest, TestEmpty) {
Stack s;
EXPECT_TRUE(s.empty());
s.push(1);
EXPECT_FALSE(s.empty());
s.pop();
EXPECT_TRUE(s.empty());
}
TEST(StackTest, TestCount) {
Stack s;
EXPECT_EQ(0, s.count());
s.push(1);
EXPECT_EQ(1, s.count());
s.push(2);
EXPECT_EQ(2, s.count());
s.pop();
EXPECT_EQ(1, s.count());
s.pop();
EXPECT_EQ(0, s.count());
}
TEST(StackTest, TestOneElement) {
Stack s;
s.push(1);
EXPECT_EQ(1, s.pop());
}
TEST(StackTest, TestTwoElementsAreLifo) {
Stack s;
s.push(1);
s.push(2);
EXPECT_EQ(2, s.pop());
EXPECT_EQ(1, s.pop());
}
TEST(StackTest, TestEmptyPop) {
Stack s;
EXPECT_EQ(NULL, s.pop());
}
TEST(StackTest, TestEmptyOnEmptyPop) {
Stack s;
EXPECT_TRUE(s.empty());
s.pop();
EXPECT_TRUE(s.empty());
}
TEST(StackTest, TestCountOnEmptyPop) {
Stack s;
EXPECT_EQ(0, s.count());
s.pop();
EXPECT_EQ(0, s.count());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1804 次 |
最近记录: |