当前位置: 首页 > 知识库问答 >
问题:

在NUnit、Sql Server和UI测试中通过回滚事务来维护数据库已知状态的正确方法

储臻
2023-03-14
[SetUp]
public void TestSetUp()
{
    _scope = new TransactionScope();
}

[TearDown]
public void TearDown()
{
    _scope.Dispose();
}

[Test]
public void SomeTest()
{
    Utilities.SomeDeleteTransaction(companyCode);    
}

共有1个答案

淳于开畅
2023-03-14

数据库快照!

/* Create a database snapshot */

USE master;
CREATE DATABASE Your_Database_Snapshot ON
( 
    NAME = Your_Database, 
    FILENAME = 'C:\Snapshots\Your_Database_Snapshot.ss' 
)
AS SNAPSHOT OF Your_Database;
GO
USE master;
RESTORE DATABASE Your_Database from 
DATABASE_SNAPSHOT = 'Your_Database_Snapshot';
GO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.IO;
using System.Data.SqlClient;

[SetUp]
public void TestSetUp()
{
    string sqlConnectionString = @"server=test.database.com;uid=your_db_username;pwd=your_db_password;database=Your_Database;";

    string script = File.ReadAllText(@"~/create_db_snapshot.sql");
    SqlConnection conn = new SqlConnection(sqlConnectionString);

    Server server = new Server(new ServerConnection(conn));
    server.ConnectionContext.ExecuteNonQuery(script);
}


[TearDown]
public void TearDown()
{
    string sqlConnectionString = @"server=test.database.com;uid=your_db_username;pwd=your_db_password;database=Your_Database;";

    string script = File.ReadAllText(@"~/restore_db_from_snapshot.sql");
    SqlConnection conn = new SqlConnection(sqlConnectionString);

    Server server = new Server(new ServerConnection(conn));
    server.ConnectionContext.ExecuteNonQuery(script);
}

快照文档:https://msdn.microsoft.com/en-us/library/ms175158.aspx

执行.sql文件的代码信用:https://stackoverflow.com/a/1728859/3038677

/* Kill all current connections to Your_Database */

use master;
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses 
WHERE dbid = db_id('Your_Database')
 类似资料:
  • 本文向大家介绍PostgreSQL数据库事务出现未知状态的处理方法,包括了PostgreSQL数据库事务出现未知状态的处理方法的使用技巧和注意事项,需要的朋友参考一下 背景 数据库的事务是原子操作,要么成功,要么失败。但是实际上在客户端的视角,可能有第三种状态:unknown状态。 当客户端提交事务结束(rollback , commit , prepare xact , rollback pxa

  • 问题内容: 我测试我的DAO和服务没有问题,但是当我测试s或s时,我想回滚事务并且不影响我的数据库。 我正在使用我的服务来管理交易。我想知道,是否有可能知道交易是否正常,但是回滚它以防止更改数据库? 这是我的测试: 问题在于该测试将失败,因为事务已回滚,但是插入正常!如果删除,则测试通过,但新记录将插入数据库。 现在可以正确测试通过,但是回滚将被忽略,并且记录将插入到数据库中。显然,我已经在myS

  • 我有复选框和提交按钮。用户可以使用复选框和按钮单击筛选选项。但现在我要维护此复选框的状态事件。所以用户应该知道哪些复选框已经被选中,并且他们可以从复选框中过滤选项。到现在为止,我能够成功地使用复选框和按钮点击来过滤选项,但是不知道如何维护选中的复选框的状态事件。所以在页面刷新之后,用户应该能够识别选中的复选框事件。我将选中的复选框存储在数据库中作为一个数组,以后再检索它。这里是我的代码:js代码:

  • 测试将创建的数据保存在H2测试数据库中,随后的测试在测试套件中执行时将失败。 我如何用事务绕过类的所有测试,并在类的所有测试执行后回滚所有数据库修改?

  • 我有使用Firebase身份验证的电子邮件功能注册的用户。只有经过身份验证的用户才应该写入我的FiRest数据库。 我的规则(来自文档): 允许访问存在非空身份验证对象的每个请求。这似乎不是很安全。因为你可以用任何对象发出请求。 所以,为了避免这个问题。如何检查给定的