第一天学习Visual Studio 2017 Enterprise的编码UI测试。我有一个包含一些测试的计算器应用程序,它们都通过了。
还有另一个带有登录屏幕的医生手术管理系统应用程序,用户名和密码存储在数据库中。
这个想法是让用户名和密码的表数据作为断言的参数。
如何将数据库添加到[测试方法]?
在这里输入我的代码
登录表单
private void btnLogin_Click(object sender, EventArgs e)
{
//Try and open a connection with database and run the code
try
{
//Create new instance of sql connection, pass in the connection string for BayOneSurgerySystem.mdf to connect to database.
SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\davie\Documents\UniWork\Software Engineering\BayOneSurgerySystem1.0\Database\BayOneSystem.mdf;Integrated Security=True;Connect Timeout=30");
//Create new instance of SQlCommand and pass in a query to be called to retrieve table data for username and passwords aswell as the connection object.
SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username = @username and Password = @password", conn);
//This passes user input into @username and @password
cmd.Parameters.AddWithValue("@username", txtBoxUsername.Text);
cmd.Parameters.AddWithValue("@password", txtBoxPassword.Text);
//Open connection with database
conn.Open();
//Create new instance of dataSet to hold the data retrieved from sql query
DataSet ds = new DataSet();
//Create new instance of DataAdpater to retrieve the data pass in Sql command
SqlDataAdapter da = new SqlDataAdapter(cmd);
//using DataAdapter fill in dataSet wiht data if user input and stored data matches
da.Fill(ds);
//Close the connection now data table is filled with username and password
conn.Close();
//declare bool, true if there is a match with database and user input
bool loginSuccess = (ds.Tables[0].Rows.Count == 1);
//if login success is true then open menu
if (loginSuccess)
{
/*Change state of enum RoleTypes based on result from dataSet Role_ID column.
In UserRole table records are as follows:
Role_ID 1 = PracticeManager
2 = Doctor
3 = Receptionist*/
//Print role_ID to console to check that is been set.
Console.WriteLine(ds.Tables[0].Rows[0]["Role_ID"]);
try
{
//Condition for the switch statement is: check Role_ID from UserRoles table
switch (ds.Tables[0].Rows[0]["Role_ID"])
{
//if the case is that Role_ID for the user logged in is 1 then run the function etc.
case 1:
{
Roles.Role = Roles.RoleType.practiceManager;
Console.WriteLine("Role type changed to " + Roles.Role);
}
break;
case 2:
{
Roles.Role = Roles.RoleType.doctor;
Console.WriteLine("Role type changed to " + Roles.Role);
}
break;
case 3:
{
Roles.Role = Roles.RoleType.receptionist;
Console.WriteLine("Role type changed to " + Roles.Role);
}
break;
default:
break;
}
}//Switch condition cannot be reached then catch exception and print to console.
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.WriteLine("Logged in.");
FrmMenu menu = new FrmMenu();
menu.Show();
this.Hide();
}
else
{
MessageBox.Show("Invalid username or password.", "Error!", MessageBoxButtons.RetryCancel);
Console.WriteLine("Not logged in");
}
}
//If connection cant be opened diplsay error message and catch exception and print to console
catch (Exception ex)
{
Console.WriteLine(ex);
MessageBox.Show("Sorry can't connect");
}
}
编码的UI测试
/// Summary description for CodedUITest1
/// </summary>
[CodedUITest]
public class CodedUITest1
{
public CodedUITest1()
{
}
[TestMethod]
public void CodedUITestMethod1()
{
}
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
private TestContext testContextInstance;
public UIMap UIMap
{
get
{
if (this.map == null)
{
this.map = new UIMap();
}
return this.map;
}
}
private UIMap map;
}
}
[数据源(连接字符串在这里吗?),测试方法]
谢谢!
答案 0 :(得分:1)
编码的UI支持多种类型的数据源,包括CSV,Excel,SQL和XML。有关CSV数据源和有关数据驱动的一些常规信息,请在此处的堆栈溢出中阅读this answer。这个(旧的)web page似乎是数据源的主要文档。该网页上表格的“其他类型”部分引用了MSDN article,它提供了其他几种SQL数据库类型的连接字符串。
对于SQL Express中保存的数据,请根据以下条件使用DataSource
和TestMethod
属性:
[DataSource("System.Data.SqlClient",
"Data Source=.\\sqlexpress;Initial Catalog=tempdb;Integrated Security=True",
"Data", DataAccessMethod.Sequential),
TestMethod]
其他类型的SQL数据库使用上述内容的变体。