3
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cソースコードのテスト自動化をgoogletestで行う(VSCodeでgoogletestを実行する編)(2/3)

Last updated at Posted at 2021-01-08

#概要
Cソースコードのテスト自動化をgoogletestで行うの2記事目です。
本記事では、VSCodeで環境構築し、Cソースコードに対して1記事目でインストールしたgoogletestを用いてテストを実行します。

VSCodeでのプロジェクトの構築、ビルド設定、オブジェクトコードの実行について知りたい方にも役に立てばと思います。

##全体の流れ

  1. googletest導入編
  2. VSCodeでgoogletestを実行する編(本記事の内容)
  3. サンプルプログラムの作成
  4. ビルドの設定
  5. 実行
  6. ソースコードの修正
  7. intellisenseの設定
  8. テスト自動化(作成予定でしたが、別記事で似た内容を記載しました。)
  9. GitHubの導入
  10. Jenkinsサーバーの導入

#VSCodeのプロジェクト作成
#C/C++ for Visual Studio Codeのインストール
VSCodeの拡張機能から、C/C++を検索し、インストールします。
image.png

##サンプルプログラムの作成
適当なフォルダを作成し、VSCodeのファイルからフォルダーを開くを選択します(今回は"googletestPrj"フォルダで勧めます)
image.png

テスト用サンプルスクリプトを作成します
addTest.cc

#include <gtest/gtest.h>
#include "add.h"

TEST(AddTest, onePlusTwoGivesThree){
    EXPECT_EQ(3, add(1,2));
}

次に、テスト対象ファイルを作成します
add.c

#include "add.h"

int add(int i1, int i2){
    return 0;
}

add.h

#ifndef ADD_H_
#define ADD_H_

#ifdef __cplusplus
extern "C" {
#endif
int add(int i1, int i2);

#ifdef __cplusplus
}
#endif

#endif /* ADD_H_*/

##ビルドの設定
コマンドパレットを開き(Ctrl + Shift + P)、
Tasks: Configure Task → テンプレートから tasks.json を生成 → Others 任意の外部コマンドを実行する例 を選択
image.png
image.png
image.png

テンプレートが作成されるので、下記のように修正

  • "command" : シェルを実行するコマンド。(g++が無い場合は適宜インストールしてください。)
  • "args" : コンパイラに渡す引数
  • "*.c" "*.cc" → コンパイル対象。
  • "-g" → デバッグ時にブレイクを貼るため
  • "-pthread" "-lgtest_main" "-lgtest" → googletestとのリンクに必要
  • "group" : "kind"属性を"build"にすることで、"Ctrl + Shift + b"押下時にこのtasks.jsonが実行されるようになる
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "addTest",
            "type": "shell",
            "command": "g++",
            "args": [
                "add.c",
                "addTest.cc",
                "-g",
                "-pthread",
                "-lgtest_main",
                "-lgtest",
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

Ctrl + Shift + B でビルドを実行すると、a.outが作成されます。
image.png

##実行
作成したa.outを実行しましょう。
デバッグの開始(F5)を押し、
C++(GDB/LLDB) を選択
image.png

テンプレート(launch.json)が作成されるので、下記のように修正

  • "program" : 実行するプログラム。今回のファイルパスに修正
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 起動",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "gdb の再フォーマットを有効にする",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

実行!!(Ctrl + F5)
image.png

うまく行けば、ターミナル上で、テストが失敗したことが表示されます。

##ソースコードの修正
__add.c__にバグが潜んでいるので修正しましょう

#include "add.h"

int add(int i1, int i2){
    return i1 + i2;
}

Ctrl + Shift + B で再度ビルドし、
Ctrl + F5 で実行!!
image.png
無事テストが通りました。

##intellisenseの設定
赤波線があって気持ち悪いので消します。
コマンドパレットを開き(Ctrl + Shift + P)、__C/C++: Edit Configurations(JSON)__を選択
image.png

c_cpp_properties.jsonが作成されるので下記の様に設定し、intellisenseの設定をします。

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "gcc-arm"
        }
    ],
    "version": 4
}

無事、消えました。
image.png

3
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?