Ich weiß, dass diese Frage schon einmal gestellt wurde, aber ich muss noch eine Antwort finden, die tatsächlich funktioniert.TransactionScope und DataContext
Mein Problem tritt auf, wenn meine Komponententests versuchen, einen Webdienst aufzurufen, der Linq verwendet, um die Datenbank abzufragen.
Die Unit-Test ist wie so ein:
[TestInitialize]
public void SetUp()
{
var scope = new TransactionScope(TransactionScopeOption.Required,TimeSpan.MaxValue);
var database = new DatabaseDataContext();
}
[TestCleanup]
public void TearDown()
{
scope.Dispose();
database.Dispose();
}
[TestMethod]
public void GetCategoryList_Success()
{
// create test data
var result = service.GetItems();
}
Die service.GetItems Methode, wie so aussieht:
try
{
using (DatabaseDataContext database = new DatabaseDataContext())
{
var items = (from i in database.Items
select i).ToList<Items>();
return items;
}
}
catch (Exception ex)
{
// log error
return null;
}
Wenn die Linq Abfrage auszuführen versucht, wird die folgende Ausnahme ausgelöst:
Die Operation gilt nicht für den Status der Transaktion.
Ich glaube, dies mit verschachtelten Transaktionen zu tun, aber ich brauche die Transaktion in der Testklasse offen zu halten, so dass die Testdaten tatsächlich nicht in die Datenbank gespeichert und ich kann darüber verfügen, wenn der Test Lauf.
Auch mein Hosting befindet sich in einer gemeinsam genutzten Instanz, daher kann ich keine Änderungen direkt am Server vornehmen.
Gibt es eine Möglichkeit, dies so zu machen, wie es ist, oder gibt es alternativ eine Alternative zur Verwendung von TransactionScope in diesem Kontext?