しまぞうブログ

プログラミングと資産運用

Visual StudioでのC#プログラミング入門【単体テスト】

Visual Studioには効率的にテストを行える環境があります。しかし、使い方をよく知らないと、面倒だったり使いにくく感じる可能性さえあります。

そこで本記事では、Visual StudioC#プログラミングをする際の単体テスト方法を解説します。

関連記事

環境

手順

テスト対象のプログラム

以下のサンプルプログラムをテスト対象とします。加算と減算をするだけです。

using System;

namespace CalculateNS
{
    public class Calculate
    {
        public static int Addition(int a,int b)
        {
            return a + b;
        }

        public static int Difference(int a,int b)
        {
            return a - b;
        }

        public static void Main()
        {
            int n = Calculate.Addition(1, 1);
            int m = Calculate.Difference(2, 1);
            Console.WriteLine("Add:" + m + "Dif:" + n);
        }
    }
}

テストプロジェクトの作成

はじめにテスト用のプロジェクトを作成します。

「ファイル」→「追加」→「新しいプロジェクト」の順にクリックします。

検索窓に「テスト」と入力すると出てくる「MSTestテストプロジェクト」を選択し「次へ」を押します。

プロジェクト名を入力し「次へ」を押します。

「.NET 6.0」を選択し「作成」を押すと、テストプロジェクトが作成されます。

参照の追加

テストプロジェクト内でテスト対象のプロジェクトを参照できるようにします。その手順を説明します。

テストプロジェクト内の「依存関係」を右クリックし、「プロジェクト参照の追加」をクリックします。

以下の画面が表示されたら、「プロジェクト」をクリックします。
テスト対象のプロジェクト全てにチェックを入れたら、「OK」を押します。

この設定をしてもテスト対象のプロジェクトを参照できない場合、以下のサイトにいくつかの解決策が記載されていますので、参考にしてください。
webdevqa.jp.net:型または名前空間の名前が存在しません

テストプログラムの作成

テストを実行するためのコードを記述します。

以下のサンプルでは、テスト対象プログラムのAdditionメソッドが想定通り動作しているかテストします。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using CalculateNS;

namespace TestProject1
{
    [TestClass]
    public class CalculateTests
    {
        [TestMethod]
        public void TestMethod1()
        {
            int n = Calculate.Addition(1, 2);
            Assert.AreEqual(3, n);      // 期待される値になっているかテスト
            Assert.IsTrue(n == 3);      // Trueかどうかをテスト
        }
    }
}

2行目のusing CalculateNS;でテスト対象のメソッドを含む名前空間を記述しておくと、テストプログラム内で名前空間をコード内で省略できます。

13行目のAssert.AreEqualは値が一致しているかどうかをテストします。また14行目のAssert.IsTrueは式がTrueかどうかをテストします。

他にもAssert.*は色々あるみたいですが、基本的にはこの2つのメソッドで十分です。

テストの実行

テストを実行するには、「テスト」→「テストエクスプローラー」の順にクリックし、テストエクスプローラーを表示します。

テストエクスプローラーが表示されたら、「実行」(下図赤枠内の三角)を押してテストプログラムを実行します。このテストでは全て想定通りのテスト結果となるため、緑のチェックマークがつきます。

テスト結果がNGとなるように、テストプログラムの14行目を「Assert.IsTrue(n==2);」に変更してテストを実行してみます。

すると、以下のように×マークとなり、想定した値が得られていないことが示されます。NG箇所はテスト詳細の概要で確認できますので、それを参考にデバッグしましょう。

参考サイト

Visual StudioでのC#プログラミング入門【事前準備~ビルド】

C#をプログラミングする際、それまでPythonなどしか勉強したことのない方は、「.NET Framework」や「プロジェクト」など聞きなれない単語が出てきて、少し困惑するかもしれません。

そこで、初心者でも簡単に扱える統合開発環境(IDE) Visual Studio を使用して、C#プログラミングをする方法について説明します。本記事では、簡単なコードをビルドして実行するまでを解説します。

関連記事

環境

手順

事前準備

事前にVisual StudioC#関連のコンポーネントをインストールする必要があります。

Visual Studio Installerを起動し、「変更」をクリックします。

「.NETデスクトップ開発」にチェックをしてインストールします。

プロジェクトの作成

Visual Studioを起動し、「新しいプロジェクトの作成」をクリックします。

次にドロップダウンリストから「C#」を選択します。

絞り込まれた選択肢の中から、作りたいアプリに応じた項目を選択します。今回はサンプルなので、もっとも単純な「コンソールアプリ」を選択します。

選択したら「次へ」をクリックします。

プロジェクト名、プロジェクトの作成場所、ソリューション名を入力し、「次へ」を押します。

memo

ソリューションは解決したい課題ごとに作成します。ソリューションに複数のプロジェクトを作成することが可能で、1つのアプリを複数のプロジェクトで構成することができます。

ドロップダウンリストから適切なバージョンの.NETを選択します。特別な事情が無い限り最新バージョンを選択すればよいです。

選択したら「作成」をクリックします。

ビルド

プロジェクトが作成されると、以下のような画面が表示されます。"Hello World!"をコンソールに表示するコードがはじめから入力されています。

※このコードはMainメソッドを簡略化したものです。

ビルドして実行するにはF5を押します。
デバッグコンソールが起動し、以下のように表示されます。

コードの追加

上記のコードに一時停止するコードを追加してみます。

先ほどと同様にF5を押して実行します。

Enterキーを押すとプログラムが終了します。

参考サイト

クイック スタート: Visual Studio を使用して初めての C# コンソール アプリを作成する

【Selenium】C#で自動ログインするサンプルプログラム【Chrome】

作業を自動化したいとき、サイトにログインする必要があることも多いです。そこで、自動でログインする方法について、サンプルプログラムを交えて解説します。

今回はC#です。Pythonでの手順は以下の記事をご覧ください。

shimazoh.hatenablog.com

作業環境

Visual StudioC#を使えるようにする方法はこちらをご覧ください。

事前準備

Visual Studioの「NuGetパッケージの管理」から以下のパッケージのインストールが必要です。

サンプルプログラム

楽天e-naviにログインするサンプルプログラム

楽天e-naviにログインするサンプルプログラムです。

他のサイトではURLはもちろん、ログインIDやパスワードの入力領域の取得方法が変わってきます。

using System;
using System.IO;
using System.Reflection;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace SeleniumTest
{
    class MainClass
    {
        const string LOGIN_ID = "xxxx";
        const string PASSWORD = "xxxx";

        public static void Main(string[] args)
        {
            // Webドライバーのインスタンス化
            IWebDriver driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

            driver.Navigate().GoToUrl(@"https://www.rakuten-card.co.jp/e-navi/");  // URLに移動

            IWebElement mailAddress = driver.FindElement(By.Name("u"));  // メールアドレスの入力領域を取得
            IWebElement password = driver.FindElement(By.Name("p"));     // パスワードの入力領域を取得

            mailAddress.Clear();  // メールアドレスの入力領域を初期化
            password.Clear();     // パスワードの入力領域を初期化

            mailAddress.SendKeys(LOGIN_ID);     // メールアドレスを入力
            password.SendKeys(PASSWORD);        // パスワードを入力

            mailAddress.Submit();

            driver.Quit();
        }
    }
}

21,22行目の要素の取得はWebページにアクセスし、右クリックメニューの「検証」を使用して調べます。詳細はこちらのサイトが参考になります。

岡三オンライン証券にログインするサンプルプログラム

こちらは岡三オンライン証券のサイトにログインするサンプルプログラムです。

using System;
using System.IO;
using System.Reflection;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace SeleniumTest
{
    class MainClass
    {
        const string LOGIN_ID = "xxxx";
        const string PASSWORD = "xxxx";

        public static void Main(string[] args)
        {
            // Webドライバーのインスタンス化
            IWebDriver driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

            // URLに移動します。
            driver.Navigate().GoToUrl(@"https://www.okasan-online.co.jp/login/jp/");

            IWebElement loginId = driver.FindElement(By.Name("account"));  // メールアドレスの入力領域を取得
            IWebElement password = driver.FindElement(By.Name("pass"));     // パスワードの入力領域を取得

            loginId.Clear();  // メールアドレスの入力領域を初期化
            password.Clear();     // パスワードの入力領域を初期化

            loginId.SendKeys(LOGIN_ID);     // メールアドレスを入力
            password.SendKeys(PASSWORD);        // パスワードを入力

            driver.FindElement(By.Name("buttonLogin")).Submit();
            driver.FindElement(By.Name("buttonOK")).Click();

            driver.Quit();
        }
    }
}

参考サイト

C# 自動ログイン Selenium実践編

【Selenium】Pythonで自動ログインするサンプルプログラム【Chrome】

作業を自動化したいとき、サイトにログインする必要があることも多いです。本記事では自動でログインする方法について、サンプルプログラムを交えて解説します。

なお、本記事の手順を実行するには、事前にSeleniumのインストール必要です。

shimazoh.hatenablog.com

作業環境

  • Windows10
  • Anaconda 4.10
  • Python 3.8

サンプルプログラム

楽天e-naviにログインするサンプルプログラム

楽天e-naviにログインするサンプルプログラムです。

他のサイトにログインする場合、基本的には6,10,11行目を変更することになります。

import time
from selenium import webdriver

driver = webdriver.Chrome("C:\\chromedriver.exe")  # ドライバ保存先

driver.get('https://www.rakuten-card.co.jp/e-navi/') # 目的のサイトにアクセス

time.sleep(1)

mailAddress = driver.find_element_by_name('u')  # メールアドレスの入力領域を取得
password = driver.find_element_by_name('p')     # パスワードの入力領域を取得

mailAddress.clear()  # メールアドレスの入力領域を初期化
password.clear()     # パスワードの入力領域を初期化

mailAddress.send_keys("mail address")   # メールアドレスを入力
password.send_keys("password")          # パスワードを入力

mailAddress.submit()

10,11行目の要素の取得はWebページにアクセスし、右クリックメニューの「検証」を使用して調べます。詳細はこちらのサイトが参考になります。

岡三オンライン証券にログインするサンプルプログラム

別の例として、岡三オンライン証券のサイトにログインするサンプルプログラムをご紹介いたします。

6,10,11行目以外に19行目以降も変更が必要です。このあたりはサイトによってまちまちです。

import time
from selenium import webdriver

driver = webdriver.Chrome("C:\\chromedriver.exe")  # ドライバ保存先

driver.get('https://www.okasan-online.co.jp/login/jp/')

time.sleep(1)

account = driver.find_element_by_name('account')    # ログインID入力領域を取得
password = driver.find_element_by_name('pass')      # パスワード入力領域を取得

account.clear()
password.clear()

account.send_keys("Login ID")     # ログインIDを入力
password.send_keys("password")    # パスワードを入力

driver.find_element_by_name('buttonLogin').submit() # 証券総合取引口座にログイン

time.sleep(1)

driver.find_element_by_name('buttonOK').click()  #ログイン後のOKボタンをクリック

参考サイト

PythonでGoogle Chromeを自動操作するための準備【Selenium】

Google ChromeなどのWebブラウザを自動操作できると、様々な作業を自動化でき、とても捗ります。クラウドソーシングでもそのようなプログラム作成依頼をよく見かけます。

本記事では、PythonGoogleChromeを自動操作するための準備について解説します。

作業環境

  • Windows10
  • Anaconda 4.10(scoopでインストール)
  • Python 3.8

作業手順

作業前に仮想環境を新規作成しておきましょう。

Seleniumのインストール

以下の2つの方法のどちらでも良いです。

Anaconda Navigatorを使用する場合

Anaconda Navigatorで「Selenium」を検索しApplyします。

完了後、再度検索してインストールされていればOK。

Anaconda Promptでコマンドを打つ場合

Anaconda Promptを起動して以下のコマンドを入力してもよいです。

conda install -c conda-forge selenium

インストール完了後、以下のコマンドで確認しましょう。

conda list

②ブラウザドライバのインストール

Seleniumを動作させるにはブラウザに応じたドライバが必要です。

ドライバはこちらのサイト(https://chromedriver.chromium.org/downloads)からダウンロード可能です。

上記サイトにアクセスすると、多くのバージョンが公開されていますので、自分が使用しているGoogle Chromeのバージョンに合ったものをダウンロードしましょう。

バージョンは、ブラウザの右上の点(Google Chromeの設定)→「ヘルプ」→「Google Chromeについて」で確認できます。

ダウンロードしたドライバ(exeファイル)は適当なところに保存してください。プログラム内でパスを指定して使用します。

動作テスト

Google Chromeを自動操作する準備ができたので、簡単なプログラムで動作テストします。

以下はGoogleで「sample」と検索するプログラムです。コードの説明は本記事では割愛します。

from selenium import webdriver
import time

driver = webdriver.Chrome("C:\\chromedriver.exe") #ドライバ取得 パスはドライバの保存先

driver.get("https://www.google.co.jp/")    # 目的のサイトにアクセス

search = driver.find_element_by_name('q')  # 検索ボックス(name='q')取得
search.send_keys('sample')                 # 検索ワード送信
search.submit()                            # 検索実行

time.sleep(3)

driver.quit()                 # 閉じる

これでChromeを操作できるようになりました。

関連記事

shimazoh.hatenablog.com

参考サイト

Python量子プログラミング環境構築 IBM Qiskit編【Anaconda】

Pythonで量子プログラミングをするための学習環境構築方法について説明します。
本記事ではIBM qiskitについて説明します。

前提条件

  • Anaconda3
    (学習サイトでAnacondaの使用が前提とされていることが多いです)
  • 仮想環境を使用

手順

ローカル環境

ローカルでqiskitを使用するための手順を説明します。

まずAnaconda Promptで以下のコマンドを実行します。

pip install qiskit
TIPS

Anacondaとpipは異なるパッケージ管理システムのため、通常は併用は避けた方が良いです。しかし、2021年12月現在ではconda intallコマンドでインストール可能なqiskitパッケージは存在しないようなので、pipを使用するしかなさそうです。

完了したら以下のコマンドでインストールができているか確認しましょう。

conda list

以下のようにqiskit関連のパッケージが表示されていればOK。

量子コンピュータ(実機)使用方法

IBM量子コンピュータの実機を誰でも使用することができます。個人の学習程度であれば無料で使えます。

以下のサイトで手順が説明されています。

3-2. QiskitとIBM Q Experienceの使い方 — Quantum Native Dojo ドキュメント

このサイトは古いのか、IBMのアカウント登録の説明が今とは異なるようです。2021年12月現在では以下のような手順で登録できます。

IBM Quantumのサイトにアクセスします
URL : https://quantum-computing.ibm.com/

以下のページが表示されたら、「Create an IBMid account」をクリックします。

あとは一般的なアカウント登録と同様の手順なので、迷うことはないと思います。

量子プログラミング学習関連記事

shimazoh.hatenablog.com

【入門者向け】量子プログラミングの学習サイトまとめ【量子コンピュータ】

量子プログラミングの勉強をしたいけど、学習サイトがなかなか見つからない…
学習サイトを見つけても、これでよいのか自信がない…

本記事はこのような悩みを持つ方の参考になるでしょう。

量子プログラミングの学習サイトはまだあまり多くありないので、オススメを調べようと思ってもよくわかりません。

私も最近量子プログラミングの勉強を始めたのですが、どのように学習を進めていこうか悩み、ひとまず色々なサイトで学習してみることにしました。

以下に私が量子プログラミングの勉強に使用した入門者向けサイトをまとめましたので、ぜひ参考にしてください。

学習サイトまとめ

①古典プログラマ向け量子プログラミング入門

URL: https://www.slideshare.net/OsSAL-org/ss-198802364

このサイトにはスライドの資料が公開されています。

GOOD
  • 図が多く見やすい
  • 重要な部分が明記してありポイントが分かりやすい
  • 数学の基礎知識についても丁寧に説明されている
  • 実践的な内容が多い

BAD
  • コードのコピペができない
  • コードの説明が少ない
  • ソフトのバージョンが古く、記載してある通りにコーディングしても動作しない箇所がある

私はこのサイトで学習を開始したのですが、中盤以降のアルゴリズムの部分は難易度が高いです。このあたりは他のサイトで学習した後に戻ってきた方が良いかなと思います。

プログラミングの環境構築については、他のサイトよりも詳しく書いてあります。私もこのサイトをはじめに見たおかけでスムーズに環境構築できました。

初めて学習をするのに向いているサイトです。特に理系大学を卒業していない方には数学の基礎の説明があるのでおすすめです。

量子コンピュータ授業(慶應大学

URL: https://www.youtube.com/playlist?list=PLB1324F2305C028F7

慶応義塾大学で2005年に行われた講義の録画です。

GOOD
  • 動画で先生が解説してくれるので、理解を深めるのに向いている

BAD
  • 大学数学の基礎知識がある前提の講義なので、初歩の説明はない
  • スライドが英語なので、英語に慣れていないと苦労する
  • 実践的な内容が少なく、手を動かしたい人にとっては退屈
  • 説明が少し難しいので、他のサイトである程度の知識を付けてから見ると良いかも。

大学の講義なので、ある程度知識のある人向けの内容です。大学数学の知識が無い方は、①のサイトで学習すると良いです。

説明も全体的に理解しにくく感じました。他のサイトで学習した後に見ると理解が深まって良いと思います。

量子コンピュータで学ぶ量子プログラミング入門

URL: https://github.com/maru-labo/ibm-q-handson/blob/master/1_basic.ipynb

jupyter notebookを使用した演習を中心に学習するサイト

GOOD
  • プログラムの説明がコメント付きで分かりやすい
  • 手を動かしながら学習できるので理解しやすい

BAD
  • 学習環境構築に関しては説明が少ない(環境構築については上記①のサイトがオススメ)
  • 初歩的な内容しかない

内容がきれいにまとまっているので初めて学習をするのには向いています。

応用的な内容は含まれていないので、こちらのサイトで学習した後に他のサイトで学習すると良いです。

※第5章の「2. IBM Qで実行する」は古いらしく動作しません。
実機を使用する演習は以下のサイトの方が良いです。https://dojo.qulacs.org/ja/latest/notebooks/3.2_Qiskit_IBMQ.html

まとめ

量子プログラミングの入門者向け学習サイトを紹介しました。

①の中盤まで→③→①→②の順で学習を進めていくと良いです。