2017-09-19 26 views
0

私は既存のMVC5 Webアプリケーションを持っていました。私はちょうど....ユニットテストプロジェクト: "アプリケーション設定ファイルに接続文字列が見つかりません"

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using SomethingApp.Services; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

using SUT = SomethingApp.Services.ReportingServices; // SUT = System Under Test 

namespace SomethingApp.Services.Tests 
{ 
    [TestClass] 
    public class GettingScoreForQuestionShould 
    { 
     [TestMethod] 
     public void ReturnScoreWhenGivenValidData() 
     { 
      // Arrange 
      int eventId = 39; 
      int questionId = 271; 
      decimal score; 

      // Act 
      score = SUT.GetScoreForQuestion(eventId, questionId); 

      // Assert 
      Assert.AreEqual("80",score); 
     } 
    } 
} 

方法GetScoreForQuestionはそれが完璧に実行通常のWebアプリケーションで実行される新しいユニットテストプロジェクトを作成し、次のコードを追加しました。しかし、私はメッセージ

私はこのエラーを取得していた試験方法...を通してそれを実行すると:と、System.InvalidOperationException::試験方法SomethingApp.Services.Tests.GettingScoreForQuestionShould.ReturnScoreWhenGivenValidData が例外をスローしない接続文字列 'myDbContext'という名前のファイルがアプリケーション設定ファイルにあります。

エラーはもちろん、通常のWebアプリケーションで正常に動作するGetScoreForQuestionメソッドから来ています。

アプリケーション構成ファイルとこの構成接続文字列をテストプロジェクトに追加する必要がある理由がわかりません。私はMVCプロジェクトのメソッドを呼び出しているので、これは接続を行い、それを行うこと(アプリケーションの通常の処理でやっていること)の責任があるように思えます。私は何か誤解していますか?

また、新しいapplication.configファイルと接続文字列をユニットテストプロジェクトに追加しようとしましたが、ビルド後にテストエクスプローラにテストメソッドが表示されなくなりました。助言がありますか?ありがとう! (試験方法を通して呼び出されたときに、Webアプリケーションの罰金で動作問題のある方法、ではなく)

UPDATE ****ここ

は.... GetScoreForQuestionためのコードです

public static decimal GetScoreForQuestion(int eventId, int ThingyQuestionId) 
{ 
    // the following line fails with the connection issue 
    var ThingyResults = Db.ThingyResults.Where(e => e.EventId == eventId && e.ThingyQuestionId == ThingyQuestionId) 
     .AsNoTracking().ToList(); 
     : 
     : 
     : 
} 

DBは、あなたのReportingServicesクラス内の新しいThingyContextを作成することができるように見えます...

public static class ReportingServices 
{ 
    private static readonly ThingyContext Db = new ThingyContext(); 
+1

GetScoreForQuestionメソッドを投稿できますか? – ovation22

+0

@ ovation22 OPを更新しました。 – WebDevGuy2

+0

Db.ThingyResultsはどこに宣言されていますか?擬似インスタンスを提供できますか?実際に何をテストしようとしていますか?データベースにぶつかることなくアプリケーションのロジックをテストする必要があります。 – ovation22

答えて

1

:ここ

は、あなたが始めるのに役立ついくつかのリンクです。これが、設定ファイルを読み込む場所です。また、web.configではなくapp.configが必要であることに注意してください。

+0

ありがとう@HansKesting – WebDevGuy2

関連する問題