0

Visual Studio Permium 2010 中的编码 UI 测试 - C#

我有一堆编码的 UI 测试,其中一个我想提示用户输入访问代码,然后将在稍后的自动化测试中使用。

这些是数据驱动的测试,但是在测试开始之前访问代码不可用。自动化步骤之一是在线注册用户,他们通过电子邮件收到访问代码。

我希望在测试期间出现提示,用户可以在自动测试继续之前输入访问代码。

我考虑查询数据库以获取访问代码,但这不是一个选项,因为代码存储在活动目录中并且测试机器无法访问它,所以我被迫这样做。任何建议将不胜感激。谢谢!

4

2 回答 2

3

也许更好的解决方案是为您的服务器抽象您的电子邮件接口,并在您的测试套件中创建一个模拟电子邮件接口,该接口可以拦截消息以接收带有访问代码的电子邮件。这样,您也不必依赖网络可用性来运行测试。

一些代码来解释我的意思:

interface IEmailAPI{
    void SendMessage(string from, string to, string subject, string body);
}

class RealEmailAPI : IEmailAPI
{
    System.Net.Mail.SmtpClient client;
    public RealEmailAPI(string host, int port)
    {
        client = new System.Net.Mail.SmtpClient(host, port);
    }

    public void SendMessage(string from, string to, string subject, string body)
    {
        client.Send(from, to, subject, body);
    }
}

class MockEmailAPI : IEmailAPI
{
    public string LastAccessCode{get;private set;}
    public void SendMessage(string from, string to, string subject, string body)
    {
        var findCode = new System.Text.RegularExpressions.Regex(""); // whatever this takes
        LastAccessCode = findCode.Match(body).Value;
    }
}

class MyServer
{
    IEmailAPI emailer;
    public MyServer(IEmailAPI emailSystem)
    {
        this.emailer = emailSystem;
    }

    public void SendAccessCode(string to, string code)
    {
        this.emailer.SendMessage("whatever@what.ever", to, "Access Code", code);
    }
}

class TestMyServer
{
    public void TestAPICodeGen()
    {
        var email = new MockEmailAPI();
        var server = new MyServer(email);
        var code = "XYZZY";
        server.SendAccessCode("not.important@discard.com", code);
        Assert.AreEqual(code, email.LastAccessCode);
    }
}
于 2013-08-27T15:50:44.243 回答
1

您不能自动检查电子邮件而不是使用用户输入或欺骗蝙蝠吗?验证电子邮件的发送和接收是否是测试的一部分?参数?

在我们的测试中,我们在公司服务器上有一个真正的虚拟电子邮件帐户,我们使用 Webmail 界面检查它并以编程方式刮取包含的密码。我们必须循环并等待电子邮件到达,尽管我们已将其限制为 5 分钟。如果电子邮件没有在给定的等待时间内到达,那么我们就会进行欺骗,首先无法通过电子邮件验证的验证点。

否则,您所需要的只是让您的代码弹出一个带有文本输入字段的消息框以供读入。查看此线程以获取带有输入字段的操作方法消息框

于 2013-08-28T12:12:54.787 回答