C# 如何按顺序运行多个[TestMethod]?

C# 如何按顺序运行多个[TestMethod]?,c#,unit-testing,selenium,C#,Unit Testing,Selenium,我在问如何运行多个测试方法,以便它们在同一个文件中 例如,我有这个单元测试文件名 public class UniTest1 { [TestMethod] public void Login() [TestMethod] public void Logout() [TestMethod] public void SignIn() [TestMethod] public void ForgetPassword() } 我要按以下顺序排列: 登录() 注销() 伪造密码() 签名() 只是

我在问如何运行多个测试方法,以便它们在同一个文件中

例如,我有这个单元测试文件名

public class UniTest1
{
[TestMethod]
public void Login()

[TestMethod]
public void Logout()

[TestMethod]
public void SignIn()

[TestMethod]
public void ForgetPassword()

}
我要按以下顺序排列:

登录()

注销()

伪造密码()

签名()


只是想澄清一下,我希望此顺序检查此电子邮件是否已经存在

如果您将测试用例结构为包含该特定用例的设置、操作和断言的代码,则不需要按任何特定顺序运行它们。一个好的建议是在测试用例之间不要有任何依赖关系,例如,您需要依赖于“登录”测试在“注销”之前运行。相反,“注销”案例中测试代码的设置将启动登录会话,并为“注销”操作的发生设置阶段

如果发现多个测试用例共享公共设置代码和拆卸代码,则可以在某些方法上使用TestInitialize和TestCleanup属性,例如:

namespace UserInteractionTests
{
    [TestClass]
    public class UserAuthenticationTestt
    {

        [TestInitialize]
        public void TestSetup()
        {
            /* Put your common initialization code here */
        }
        [TestMethod]
        public void AnAuthorizedUserCanLogin()
        {
            /* put your setup, action and assertion here
             from your system under test
            */
        }
        [TestMethod]
        public void ALoggedInUserCanLogOut()
        {
            /* put your setup, action and assertion here
             from your system under test
            */
        }

        [TestCleanup]
        public void TestCleanup()
        {
            /* Put your common teardown code here.. */
        }

    }
}

您正在设置一个包含多个步骤的大型测试,但不是四个专用测试

这里有一个例子:

public class UniTest1
{
    [TestMethod]
    public void LoginSuccess()
    {
        // Try to Log in
        o.Login("user", "pw");
        Assert.AreEqual(true, o.ImLoggedIn);
    }
    [TestMethod]
    public void LoginWrongPw()
    {
        // Try to Log in
        o.Login("user", "wrongpw");
        Assert.AreEqual(false, o.ImLoggedIn);
    }

    [TestMethod]
    public void LogOutSuccess()
    {
        // Login
        o.Login("user", "pw");
        // Check if steup is completed
        Assert.AreEqual(true, o.ImLoggedIn);

        bool ok = o.LogOut();
        Assert.AreEqual(true, ok);
    }

    [TestMethod, ExpectedException(NotLoggedInException)]
    public void LogOutNoLogout()
    {
        // Try to Log in
        Assert.AreEqual(false, o.ImLoggedIn);
        bool ok = o.LogOut();
    }
}
正如您所看到的,每个测试都是独立于其他测试的


如果您需要注销测试,您必须为其设置环境,而不是“希望”其他测试也这样做。

您可以设置注销测试,您可以告诉我们有关此问题的更多信息吗?为什么您希望它们按特定顺序运行?你真的要做一个测试(检查登录、注销、登录和密码重置),而不是4个测试吗?你的意图是什么?当你可以建立一个有序的测试时,你应该考虑是否有很好的相互依赖的测试用例。这表明你的测试依赖于他们不应该依赖的东西,这可能会导致后续问题。我想知道为什么在我的vs研究2017中没有顺序测试选项理想情况下,测试的顺序应该无关紧要。他们真的应该是独立的。更可能的情况是,您应该创建一个测试,它可以为您完成所有事情。我认为TestInitialize不是这种情况下的解决方案。每个测试都需要一个特殊的init。如果每个测试都需要一个特殊的init,他应该在每个测试用例中进行初始化,正如我在我的示例中所述。这是测试用例代码的设置部分。