2016-09-01 56 views
1

我需要验证一个(重)功能只在正确的输入上执行。有没有一些简单的方法来做到这一点?如何测试验证特定功能是否执行

目前我看到2米的前进道路

  1. 修改功能,只有在测试

  2. 包裹的东西的功能,可以保持执行的跟踪,并用它来代替使用一个额外的参数功能

1是相当丑陋,我不知道该怎么办2

实施例:

例如我想测试这里重当< = 3

void function_to_test(int a){ 
    if(a>3){ 
    heavy(); 
    } 
} 
+1

如果您需要验证正确的输入端,检查输入的正确性,在功能 – ZivS

+3

使用模拟框架的开始(例如GoogleMock ,Trompeloeil,Hippomocks)来嘲弄沉重的功能并设定它的期望值。 –

+0

也许为你的问题添加一些代码,因为它不清楚 – ZivS

回答

0

这里是一个例子,如何使用GTEST编写单元测试不执行。

class Turtle { 
virtual ~Turtle() {} 
virtual void PenUp() = 0; 
virtual void PenDown() = 0; 
virtual void Forward(int distance) = 0; 
virtual void Turn(int degrees) = 0; 
virtual void GoTo(int x, int y) = 0; 
virtual int GetX() const = 0; 
virtual int GetY() const = 0; 
}; 

#include "gmock/gmock.h" // Brings in Google Mock. 
class MockTurtle : public Turtle { 
public: 
    ... 
    MOCK_METHOD0(PenUp, void()); 
    MOCK_METHOD0(PenDown, void()); 
    MOCK_METHOD1(Forward, void(int distance)); 
    MOCK_METHOD1(Turn, void(int degrees)); 
    MOCK_METHOD2(GoTo, void(int x, int y)); 
    MOCK_CONST_METHOD0(GetX, int()); 
    MOCK_CONST_METHOD0(GetY, int()); 
}; 

#include "path/to/mock-turtle.h" 
#include "gmock/gmock.h" 
#include "gtest/gtest.h" 
using ::testing::AtLeast;      // #1 

TEST(PainterTest, CanDrawSomething) { 
    MockTurtle turtle;       // #2 
    EXPECT_CALL(turtle, PenDown())    // #3 
     .Times(AtLeast(1)); 

    Painter painter(&turtle);     // #4 

    EXPECT_TRUE(painter.DrawCircle(0, 0, 10)); 
}            // #5 

int main(int argc, char** argv) { 
    // The following line must be executed to initialize Google Mock 
    // (and Google Test) before running the tests. 
    ::testing::InitGoogleMock(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

而更多的文档在下面的链接

https://github.com/google/googletest/blob/master/googlemock/docs/ForDummies.md

+1

你应该解释你的例子和原始问题之间的类比。你的例子中这个“重”的功能是什么?你和我理解,但对提问的人来说可能并不明显。另外,您没有演示检查输入参数。 –