質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

3回答

4711閲覧

DBを更新するメソッドのテストの自動化の方針は?

cancat

総合スコア313

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

1クリップ

投稿2017/07/10 06:10

こんにちは。
Windows10でASP.NETのアプリケーションを開発しています。
Visual Studio 2017 Communityを使っています。

###前提・実現したいこと
あるメソッドのテストコードを書きたいです。
コードは下記のようなものです。
それぞれの処理で10-20行ぐらいずつあり、全体では100行くらいのメソッドです。

###該当のソースコード

C#

1private void method(){ 2 //メールの本文をファイルから取得。 3 string mailtemplate = GetMailTemplateFromFile(filepath); 4 5 //送信先のメールアドレスをデータベースから取得。 6 List<string> mailaddresses = GetMailAddressFromDB(); 7 foreach(string mail in mailaddresses){ 8 //メール送信 9 SendMail(mail, mailtemplate); 10 //送信したかどうかをデータベースに登録。 11 UpdateDatabase(mail); 12 } 13}

###発生している問題・エラーメッセージ
問題は、メールを送信するとデータベースを更新してしまうため、同じメソッドを2回繰り返すと、2回目は本来送るべきメール送信ターゲットが、ターゲットでなくなってしまうことです。
そのため、現在は、
・手動でテスト
・DBをSSMSで手動で編集。送信済みフラグをオフ。
というのを繰り返しています。
これは効率が悪い。

こういう場合、どういうふうにメソッドを構成すれば、自動でテストできるようになるのでしょう?

#If DebugとかでDBに登録しないようにするとかでしょうか?

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2017
Version 15.0.26228.9 D15RTWSVC
Microsoft .NET Framework
Version 4.6.01586

です。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

メソッドの問題というよりも、テストの方法の問題の様な気がします。

テスト開始時にマスタも含めて全て自動的に削除&作成するコードを走らないと前提条件が変わってきます。
一般的なテストスイートですとテストの前処理と後処理が書けるはずですので、リセットする処理を書かないといけません。

投稿2017/07/10 06:25

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/07/10 11:50

なるほど。テストには、前処理と後処理を書けるのですね。 その後処理で、送信済みフラグをオフにすればよいってことですね。
guest

0

ベストアンサー

決めの問題とは思いますが、2回実施することを自動化したいのであれば、
テストコードに送信済みフラグをオフにするコードを挿入すればいいのではないでしょうか。

投稿2017/07/10 06:14

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/07/10 11:49

なるほど。テストコードで送信済みフラグをオフにすればよかったのですね! それは目からうろこでした。
guest

0

手動作業の内容を逐一書き出しして、
それを、コード化する。
自動ならではの、機能も考えておいた方が良いが、
まずは、出来る事から。

1.DBをSSMSで手動で編集。送信済みフラグをオフ。
⇒ストアド1本書いて、手動作業で行っている内容+実行ログを記録
ストアドでなくても、拡張子:sql のファイルを実行しても良い。
成功時、失敗時のデータベースの変更内容が不要なら、トランザクションで
巻き戻し。

2.手動でテスト
⇒シナリオ化、分類別にコード化

3.5W1H + α
⇒これが出来ていれば、この質問はでないはず。

投稿2017/07/10 06:26

daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/07/10 11:48

ご回答ありがとうございます。 ストアドってなんでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問