Help us understand the problem. What is going on with this article?

[paiza]C#のテストを楽に行う方法

More than 3 years have passed since last update.

超概要

Conditional属性と、Console.SetInを利用してテスト環境を作る。

解決したい問題

paizaの回答を送信する前にローカルで動作テストを行いたい。

が、テストを行うたびにサンプルの入力値をコンソールに打ち込むのは面倒。手入力はしたくないし、サンプルコードが複数あるとコピペも面倒。楽したい。

というわけで、サンプルの入力値をファイルから読み込むようにしてみました。
提出時とテスト時でコードを書き換えないで済むので「んほぉデバッグコード消し忘れたのぉおおおおお」という事故を減らすことができます。

開発環境

一部IDEの機能を使うので、開発環境を記します。
適当にいじれば、ほとんどの環境で同等の環境を構築できるはずです。

・Microsoft Visual Studio Community 2015

いじょ。

環境構築手順

  1. プロジェクトにテキストファイルを追加する(sampleInput.txtとする)
    • プロジェクトを右クリック > 追加 > 新しい項目 > テキストファイル
  2. 追加したテキストファイルのプロパティを編集する
    • 「出力ディレクトリにコピー」の値を「常にコピーする」or「新しい場合はコピーする」にする
  3. ビルド設定の「条件付きコンパイルシンボル」に「LOCAL_DEBUG」を追加する
    • プロジェクトを右クリック > プロパティ > ビルドタブ > 全般

sampleInput.txtには、paizaで公開されているサンプル入力値をコピペしておいてください。

んで、次のようなコードを利用することで、ローカルで実行するときは入力をファイルから受け取り、提出時は普通に?入力値を受け取ることができます。提出時にコードを書き換えないで済むのがオシャレ。

namespace PaizaChallenge
{
  class Program
  {
    static void Main()
    {
      ChangeLocalDebugInput();

      // your code
      // ...
    }

    [System.Diagnostics.Conditional("LOCAL_DEBUG")]
    static void ChangeLocalDebugInput()
    {
      Console.SetIn(new System.IO.StreamReader("sampleInput.txt"));
    }
  }
}

サンプル入力セットが複数ある場合でも、ファイルを追加するだけでサクッとテストすることができます。

以上です。快適なpaizaライフを。

参考

17.4.2 Conditional 属性 (C#)
https://msdn.microsoft.com/ja-jp/library/aa664622(v=vs.71).aspx

Console.SetIn メソッド (TextReader) (System)
https://msdn.microsoft.com/ja-jp/library/system.console.setin(v=vs.110).aspx

【C#】paizaの煩わしいテスト(入力処理)を自動化したい | Black Everyday Company
http://kuroeveryday.blogspot.jp/2014/11/paiza-TDD.html

疑問

入力に使ったStreamReaderはDisposeしなくても良いのでしょうか?

MSDNのサンプルコードを見てみると、特に開放処理はしていないようなのですが。。。

Console.SetIn メソッド (TextReader) (System)
https://msdn.microsoft.com/ja-jp/library/system.console.setin(v=vs.110).aspx

Console.SetIn(new StreamReader(args[0]));
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away