2016-07-13 13 views
0

Ich bin neu in NUnit testen für asp.net mvc Web-App, Projekt Ich möchte mit Entity-Frame-Arbeit testen, um mit der Datenbank zu verbinden, aus dem Testprojekt muss ich mit der gleichen Datenbank des Projekts verbinden, die ich will zu testen .Wie man sich von NUnit Test Projekt zur Datenbank verbindet?

Controller, den ich testen wie folgt aussieht.

public class EXController : Controller 
{ 
    private readonly AppDbContext _context; 
    private readonly CommonDbContext _commonContext; 

    public EXController(CommonDbContext commonContext, AppDbContext context) 
    { 
     _commonContext = commonContext; 
     _context = context; 
    } 

    public ActionResult Index() 
    { 
    // some simple code. 
    } 
} 

Ich versuche NUnit Tests wie unten zu schreiben: In Referenzen Abschnitt des Testprojektes I hinzugefügt Projekt im Test als dll, ich bin in der Lage zu Zugriff auf alle Klassen aus dem Projekt, das ich testen mag.

CommonDbContext und AppDbContext sind die Klassen, die ich in dem zu testenden Code verwende, um eine Verbindung mit der Datenbank herzustellen. Diese Klassen nehmen das Argument als Connectionstring an.

also übergebe ich die Verbindungszeichenfolge an diese Klassen, um mit der Datenbank von Nunit Testprojekt zu verbinden.

Ich versuche, eine Verbindung zur Datenbank in NUnit-Testprojekt herzustellen, indem ich die folgende Verbindungszeichenfolge verwende.

Ich bekomme unter Ausnahme, wenn ich versuche, mit der Datenbank von NUnit Testprojekt zu verbinden.

Exception: 
An exception of type 'System.ArgumentException' occurred in EntityFramework.dll but was not handled in user code 
Additional information: Format of the initialization string does not conform to specification starting at index 164. 

**Stack Trace:** 
    at System.Data.Entity.Core.EntityClient.Internal.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, String& keyname, String& keyvalue) 
    at System.Data.Entity.Core.EntityClient.Internal.DbConnectionOptions.ParseInternal(IDictionary`2 parsetable, String connectionString, IList`1 validKeywords) 
    at System.Data.Entity.Core.EntityClient.Internal.DbConnectionOptions..ctor(String connectionString, IList`1 validKeywords) 
    at System.Data.Entity.Core.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) 
    at System.Data.Entity.Core.EntityClient.EntityConnection..ctor(String connectionString) 
    at System.Data.Entity.Internal.LazyInternalConnection.Initialize() 
    at System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel() 
    at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 
    at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 
    at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() 
    at System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate) 
    at BidMaster.Web.Infrastructure.CurrentUser.get_User() in D:\BWM_sprint3_newcopy\BidMaster.Web\BidMaster.Web\Infrastructure\CurrentUser.cs:line 30 
    at BidMaster.Web.Controllers.CLINController.Index(Nullable`1 id) in D:\BWM_sprint3_newcopy\BidMaster.Web\BidMaster.Web\Controllers\CLINController.cs:line 51 
    at BidMaster.Test.Controllers.CLINControllerTests.IndexTest() in D:\BWM_sprint3_newcopy\BidMaster.Test\BidMaster.Test\Controllers\CLINControllerTests.cs:line 47 

Irgendetwas stimmt nicht mit der Verbindungszeichenfolge, die ich verwende? Bitte helfen Sie mir, bitte erklären Sie, wie Sie mit der Datenbank von Unit-Test-Projekt verbinden. Ich bin neu im Testen.

Antwort

0

Unit-Tests sollten nie einen bestimmten Bereich überschreiten (die Einheit, in der Regel eine Klasse). Mit anderen Worten, Sie sollten die DB nicht berühren - das ist bereits System (Integrationstest).

Ihr Komponententest sollte lieber nur die Logik innerhalb dieser Index Methode testen (zum Beispiel), während Sie sich über die Ebene lustig machen, die die DB-Aufrufe behandelt.

Etwas in dieser Richtung (RhinoMocks oder anderen spöttischen Tool):

_commonDbContext = MockRepository.GenerateMock<CommonDbContext>(); 
_appDbContext = MockRepository.GenerateMock<AppDbContext>(); 

ExController obController = new CLINController(_commonDbContext, _appDbContext); 

Andernfalls, wenn Sie den Systemtest Weg gehen möchten, müssen Sie einen Antrag auf die URL (Portnummer ausgeben müssen & alles) Ihr Dienst liegt, nicht durch eine direkte Bezugnahme darauf.

Dies wurde nur als Antwort geschrieben, weil es zu lang für einen Kommentar ist. Sie müssen weitere Details zur Methode angeben, die Sie testen möchten, wenn Sie bestimmte Antworten benötigen.

+0

Ich muss mich mit der gleichen Datenbank verbinden, die ich für das Projekt unter Testen verwende, aus dem Unit-Test-Projekt, weil meine Anforderung ist, die Daten zu testen, die von den gespeicherten Prozeduren zurückgegeben werden, sowie Teil der Tests, Wenn ich die DB Mock ich konnte nicht die Daten testen, die von Store-Verfahren zurückgegeben wird, bitte helfen Sie mir, mit der gleichen Datenbank, die ich für das Projekt unter Test verwenden, aus dem Unit-Test-Projekt, ohne die DB zu verspotten. – Satya

Verwandte Themen