gpt4 book ai didi

C# - MS 测试 - 创建一个先运行另一个测试的测试

转载 作者:行者123 更新时间:2023-12-05 09:20:47 25 4
gpt4 key购买 nike

在我们的应用程序中,我为我们的网站创建了一个登录测试。如果此测试成功,则登录成功。现在要为网站的其他部分创建测试,我需要先执行登录。

有没有办法让我将创建的所有其他测试首先运行登录测试?例如:是否可以创建一个我可以放在所有其他测试方法上的自定义登录测试属性,以便它们首先运行登录?但是我还需要那个登录测试的返回值!

如果没有,那么我将不得不编写一个普通的 C# 函数来执行登录操作,我需要将该函数调用作为每个测试的第一行。

最佳答案

当您编写单元测试时,您是在隔离中测试每个方法。意思是,您正在测试的方法不能也不能依赖任何其他东西来运行。

你现在遇到问题的原因,可能是因为你至少违反了单一责任原则(声明你的类应该只有一个单一的理由被改变的原则)。我可以假设这是因为你说你在一个类中的其他方法取决于登录是否成功。解决方法如下:

为您的登录方法制作一个界面,例如:

public interface ILoginManager{
void Authenticate(string username, string password);

void IsAuthenticated{ get;}
}

接下来,使用依赖倒置原则,将此接口(interface)添加到您的类中并包含其中的方法:

public class MyWorkerClass
{
private readonly ILoginManager _loginManager;
public MyWorkerClass(ILoginManager loginManager){
_loginManager = loginManager;
}


public bool LogOnUser(string userName, string password){
_loginManager.Authenticate(userName, password);

return _loginManager.IsAuthenticated;
}
}

现在,在所有测试中,您可以模拟 LoginManager,并在那里设置您的期望,即

[TestMethod]
public void SomeMethod_UserIsAuthenticated_InvokesSomeOtherMethod()
{
// Arrange
GetMockFor<ILoginManager>().SetupGet(lm => lm.Authenticated).Returns(true);

// Act
var result = Instance.SomeMethod();

// Assert
GetMockFor<ISomeOtherInterface>()
.Verify(o => o.SomeOtherMethod(), Times.AtLeastOnce() );
}

关于C# - MS 测试 - 创建一个先运行另一个测试的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com