我有用于初始化和清理,我使用我的测试数据库的一些方法,但我的属性AssemblyInitialize和AssemblyCleanup方法不点火.
有任何想法吗?
[TestInitialize]
public void Init()
{
LoadData();
}
[AssemblyInitialize]
public void AssemblyInit()
{
}
public void LoadData(string testDataFileName = "TestData.xml")
{
connectionString = ConfigurationManager.ConnectionStrings["NDbUnit"].ConnectionString;
mySqlDatabase = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connectionString);
mySqlDatabase.ReadXmlSchema("DataSet.xsd");
mySqlDatabase.ReadXml(testDataFileName);
mySqlDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.CleanInsertIdentity);
dataSet = mySqlDatabase.CopyDataSet();
}
[AssemblyCleanup]
public void RemoveDatabases()
{
List<string> databasesToDelete = new List<string>();
ServerConnection serverConnection = new ServerConnection(new SqlConnection(connectionString));
Server server = new Server(serverConnection);
foreach (Database db in server.Databases)
{
if (db.Name.ToLower().Contains(testDatabaseIdentifier))
{
databasesToDelete.Add(db.Name);
}
}
databasesToDelete.ForEach(x =>
{
Database db = new Database(server, x);
db.Refresh();
db.Drop(); …Run Code Online (Sandbox Code Playgroud) 我试图在我的Microsoft Visual Studio 2010中实现AssemblyInitialize/AssemblyCleanup属性,其目的与此处所述的完全相同.该链接甚至描述了我需要遵循的实现代码的过程.
这个目的的快速摘要是创建一个初始代码块,它将在任何测试之前运行,无论我在解决方案中运行哪个codedUITests,然后是在最后一个codedUITest完成之后运行的代码块.示例:我需要打开一个特定的应用程序,然后运行一系列的encodeUITests,它们都从该应用程序开始,以任何顺序执行,然后在一切完成后关闭应用程序; 这比为每个codedUITest打开/关闭应用程序更有效.
我不明白的是我需要将代码放在该页面底部(也在下面显示).我把所有代码都放在我的'公共部分类UIMap'之下并且代码运行,除了它在每个CodedUITest之前/之后运行'OpenApplication'和'CloseApplication'命令,而不是将整个CodedUITests组合在一起.
如何正确实现代码?
更新:
我昨晚发现了AssemblyI/C,我花了3个小时试图找出放置代码的位置,以便它可以工作.如果我将AssemblyInitialize放在特定测试方法的开头,那么:
1)它仍然无法运行 - 它给了我一些错误,说UIMap.OpenWindow()和UIMap.CloseWindow()方法需要是静态的,我无法弄清楚如何使它们静态.
2)具有AssemblyI/C的特定[TestMethod]是否需要在测试集中?在我的情况下,我有十几个CodedUITests需要单独运行或在更大的组中运行,我需要让AssemblyI/C打开/关闭我正在测试的窗口.