C# - Asp.net web API 测试项目 - 如何模拟用户和运行 特定用户下的测试用例
C# - Asp.net web API test project - how to impersonate a user and run test cases under a specific user
我正在从事 ASP.net Web api 项目。我添加了一个测试项目。在其中一个测试用例中,我使用 windows 身份验证连接到 SQL 服务器。当我 运行 在 Visual Studio 上测试用例在本地工作正常,因为我的帐户(我的 NT ID)有权访问 SQL 服务器。
但是当我们 运行 在我们的构建服务器上使用相同的测试用例时,测试用例失败说 Microsoft.AnalysisServices.AdomdClient.AdomdErrorResponseException: Either the user, 'domain\ttwp5434203$', does not have access to the 'Employee' database, or the database does not exist.
为了克服这个问题,我正在考虑模拟测试用例运行s 下的用户。
我在测试项目下的 App.Config 文件中添加了以下代码。
<system.web>
<identity impersonate="true"
userName="UID"
password= "PWD" />
</system.web>
此更改无效。我再次遇到同样的错误。我该怎么做才能确保在特定帐户下的任何机器 运行 上测试用例。
我希望使用的另一个选项是:Impersonate(IntPtr)。但我不确定如何在多个测试用例中使用此代码。
我现在 运行 我的测试用例使用 SimpleImpersonation 库。这个 nuget 包允许你模拟某个用户并且它真的很容易使用。
[TestMethod]
public void SearchUser()
{
var credentials = new UserCredentials("domain", "UID", "PWD");
var result = Impersonation.RunAsUser(credentials, LogonType.NewCredentials, () =>
{
//CODE INSDIE THIS BLOCK WILL RUN UNDER THE ID OF ANOTHER USER
dynamic actualResult = controller.SearchUser();
//Assert
Assert.IsNotNull(actualResult);
return actualResult;
});
}
我正在从事 ASP.net Web api 项目。我添加了一个测试项目。在其中一个测试用例中,我使用 windows 身份验证连接到 SQL 服务器。当我 运行 在 Visual Studio 上测试用例在本地工作正常,因为我的帐户(我的 NT ID)有权访问 SQL 服务器。
但是当我们 运行 在我们的构建服务器上使用相同的测试用例时,测试用例失败说 Microsoft.AnalysisServices.AdomdClient.AdomdErrorResponseException: Either the user, 'domain\ttwp5434203$', does not have access to the 'Employee' database, or the database does not exist.
为了克服这个问题,我正在考虑模拟测试用例运行s 下的用户。
我在测试项目下的 App.Config 文件中添加了以下代码。
<system.web>
<identity impersonate="true"
userName="UID"
password= "PWD" />
</system.web>
此更改无效。我再次遇到同样的错误。我该怎么做才能确保在特定帐户下的任何机器 运行 上测试用例。
我希望使用的另一个选项是:Impersonate(IntPtr)。但我不确定如何在多个测试用例中使用此代码。
我现在 运行 我的测试用例使用 SimpleImpersonation 库。这个 nuget 包允许你模拟某个用户并且它真的很容易使用。
[TestMethod]
public void SearchUser()
{
var credentials = new UserCredentials("domain", "UID", "PWD");
var result = Impersonation.RunAsUser(credentials, LogonType.NewCredentials, () =>
{
//CODE INSDIE THIS BLOCK WILL RUN UNDER THE ID OF ANOTHER USER
dynamic actualResult = controller.SearchUser();
//Assert
Assert.IsNotNull(actualResult);
return actualResult;
});
}