单元测试用法

时间:2013-05-03 06:32:01

标签: c++ unit-testing

据我所知,单元测试用于测试相关功能是否按预期工作。我想知道,这只是通过检查函数的返回值来完成的吗?

除此之外是以不同方式使用的单元测试?如果可以的话,请你说明一下。

2 个答案:

答案 0 :(得分:1)

您(不仅)可以检查值,还可以检查行为。例如,使用Mock-object抛出预期异常或调用外部服务。

void testMethodThrows()
{
    Foo f;
    AssertThrows([&](){f.bar();});
}

void testSendsEmail
{
    Foo f;
    EmailServiceMock email;
    f.bar(email);
    Assert(email.EmailWasSent());
}

答案 1 :(得分:0)

你可以检查你喜欢的任何东西。而对于函数式语言,函数的返回值是函数所做的唯一指示,您可能需要检查全局状态(使用先前语言)或对象状态(使用面向对象语言)以确定测试已通过。

作为一个非常简单(通常不必要)的例子:

void testSetTextSetsText()
{
  Foo foo();
  foo.setText("bar");
  assertEqual("bar", foo.text());
}

实际上,您无法以其他方式真正测试void方法。 技术上你在这里再次检查一个方法(text())的返回值,但大多数时候你想编写测试来验证外部观察者可见的状态,所以这很好够了。