砂場

調べ物用

Googletest/mock関連

GoogleTest

入門ガイド

  • 公式
  • 日本語訳
    • 日本語訳は元の文書がちょっと古いようで、公式の記載と合わない箇所がある(だいたい同じなので混乱することはない)

上級ガイド

GoogleMock

超入門編

  • 公式
  • 日本語訳
    • 日本語訳は元の文書がちょっと古いようで、公式の記載と合わない箇所がある(だいたい同じなので混乱することはない)

クックブック

チートシート

大体はクックブックとチートシートを読めば解決するので、以下はクックブックに載っていない使い方(随時追加)

構造体メンバの値をMatcherに使う

Field Matcherはクラスのメンバだけでなく構造体のメンバにも使える。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct {
    int i;
    float f;
    char str[1024];
} Foo_t;

TEST(test_foo, foo_mocktest) {
    foomock = new FooMock;

    // 引数Foo_t型構造体のメンバiが1のときにマッチ
    EXPECT_CALL(*foomock, m_printfoo(Field(&Foo_t::i, Eq(1))))
    .WillRepeatedly(testing::Return(29));
    
    EXPECT_EQ(29, doFoo());
    delete foomock;
}

GoogleTest/Mockのインストール

入手

公式releaseから入手

インストール

Windows

アーカイブ内のgooglemock/msvc内に各バージョンのプロジェクトファイルがあるためそれを用いてビルド。Static Libraryが作られる。

macOS

アーカイブ内のgoogletest/xcodeにFrameworkをビルドするためのプロジェクトファイルがあるが、1.8.0ではFrameworkに含めるヘッダファイルに不備があるため、使えない。

googlemock内でcmakeを実行すればtest、mockともにStatic Library形式でビルドできる。

Linuxなど

アーカイブ内のgooglemockフォルダでcmakeを実行すればStatic Library形式でビルドできる。

使い方

  1. ビルドしたライブラリをプロジェクト内に配置
  2. テストコードの先頭でヘッダをインクルード
1
2
#include "gtest/gtest.h"
#include "gmock/gmock.h"

Octopressメモ

ダウンロード

GitHubのリポジトリからダウンロードする

1
$ git clone https://github.com/imathis/octopress.git

セットアップ

bundlerが無かったらインストールする

1
$ gem install bundler
1
$ bundle install

_config.ymlを編集して、サイト名などの初期情報を設定しておく

GitHub pagesへのデプロイ設定

1
$ rake setup_github_pages

ブログエントリーの追加

1
$ rake new_post["title"]

source/_posts/YYYY-MM-DD-title.markdownというファイルが出来上がるのでエントリーを編集する

ブログエントリーじゃないページの追加

1
$ rake new_page["title"]

source/title/index.markdownというファイルが出来上がるので編集する

サイトのプレビュー

1
$ rake preview

変更したファイルはすぐに検知して自動的に再生成する(後述のサイト生成を行う必要なしに反映される)

サイト生成

1
$ rake generate

サイトのデプロイ

1
$ rake deploy

Jekyllメモ

インストールする前

rvmのインストールと使用するrubyの選択

このあたりを参考

インストール

1
$ gem install jekyll

サイトの新規作成

1
$ jekyll new my-new-site

以下のファイルとディレクトリが自動的に作成される

1
2
_config.yml  _layouts    _sass       css     index.html
_includes _posts      about.md    feed.xml

サイトのビルド

$ jekyll build./_siteに作成。

出力先を指定するには--destinationで指定する

$ jekyll build --destination <destination>

--watchオプションで変更を監視し、自動的に再生成を行わせることもできる

ビルドしたサイトの確認

$ jekyll serve

プレビュー用サーバをhttp://localhost:4000/で起動する

こんな感じで表示される

jekyll_sample.png

faviconが無いと怒られる

1
[2017-06-17 12:28:34] ERROR `/favicon.ico' not found.

postレイアウト指定で

こんなファイルでビルドすると

sample.md

1
2
3
4
5
6
---
layout: post
title: サンプル
---

サンプル

こんなエラーが出る

1
2
3
Generating... 
Invalid Date: '' is not a valid datetime.
Liquid Exception: exit in _layouts/post.html

このときは、dateを指定してやる

1
2
3
4
5
6
7
---
layout: post
title: サンプル
date: 2017/06/17 12:30:00 +0900
---

サンプル

Ansibleメモ

homebrew

省略

Ansible

インストール

1
$ brew install ansible

接続先の設定

1
2
3
4
$ mkdir ansible
$ mkdir ansible/inventory
$ cd ansible
$ vi inventory/hosts

vagrantなどでsshのポート番号をデフォルト値以外にしている場合、ansible_portで指定する

1
2
[targets]
127.0.0.1 ansible_port=2222

疎通確認

1
2
3
4
5
$ ansible all -i inventory/hosts -u vagrant -m ping
127.0.0.1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Playbook作成

1
2
3
4
5
6
7
8
9
10
11
12
$ vi myplaybook.yml
- hosts: targets
  become: yes
  tasks:
  - name: install git
    apt:
      name: git
      update_cache: yes
  - name: install cmake
    apt:
      name: cmake
      update_cache: yes

文法チェック

1
2
3
$ ansible-playbook -i hosts myplaybook.yml --syntax-check

playbook: myplaybook.yml

タスクリスト表示

1
2
3
4
5
6
7
$  ansible-playbook -i hosts myplaybook.yml --list-tasks

playbook: myplaybook.yml

  play #1 (targets): targets  TAGS: []
    tasks:
      install tools   TAGS: []

dry-run

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ ansible-playbook -i hosts -u vagrant myplaybook.yml --check

PLAY [targets] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [127.0.0.1]

TASK [install git] *************************************************************
ok: [127.0.0.1]

TASK [install cmake] ***********************************************************
changed: [127.0.0.1]

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=3    changed=1    unreachable=0    failed=0 

実行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ansible-playbook -i hosts -u vagrant myplaybook.yml

PLAY [targets] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [127.0.0.1]

TASK [install git] *************************************************************
ok: [127.0.0.1]

TASK [install cmake] ***********************************************************
changed: [127.0.0.1]

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=3    changed=1    unreachable=0    failed=0 

Vagrantメモ

HomeBrew

省略

インストール

1
$ brew cask install vagrant

Package作成前に行うこと

  1. vagrantユーザー作成
  2. vagrantをsudoers入り
  3. visudoでvagrantを !requiretty 指定
  4. visudoでvagrantを NOPASSWD: ALLにする

Package作成

1
$ vagrant package --base <VM名> --output <Box名>

時間がかかるのでterminal-notifierやsayを仕込んでおいて他の作業をしよう

Box追加

1
$ vagrant box add --name <name> <BoxのパスもしくはURL>

時間がかかるので(以下略)

Vagrantfile作成

1
$ vagrant init <name>

自作のssh鍵を使う場合

1
config.ssh.private_key_path = '/path/to/rsa_key'

起動

1
$ vagrant up <name>

初回は時間がかかる