在Try-Catch语句中未达到断言方法

时间:2017-11-03 18:58:19

标签: c# mstest

我正在尝试对我的代码进行单元测试,看看我是否尝试在没有sessionKey的情况下查看帐户的详细信息,它会抛出异常。单元测试将继续执行try-catch中的语句,尽管知道会发生异常,但它会将测试列为成功,即使Assert应为false。在类似的功能中达到断言,但并非总是如此。问题的原因是什么?

原始功能

/// <summary>
/// Displays the account details to the user
/// </summary>
/// <returns>HttpResponseMessage deserialized into AccountResponses object</returns>
public async Task<AccountResponse> Details()
{
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Add("X-Session-Key", sessionKey);

    try
    {
        HttpResponseMessage response = await client.GetAsync(_baseUrl + "/Account/Details");
        response.EnsureSuccessStatusCode();
        string details = await response.Content.ReadAsStringAsync();
        AccountResponse temp = JsonConvert.DeserializeObject<AccountResponse>(details);
        return temp
    }
    catch (HttpRequestException ex)
    {
        throw ex;
    }
}

工作实时单元测试功能

[TestCategory("Account/Logon")]
[TestMethod]
public void LogOnNegativeBadPasswordTest()
{
    try
    {
        string sessionKey = dmWeb.Account.LogOn(new DMWeb_REST.AccountLogOn { Password = "test#pasasdfasfsword" }).GetAwaiter().GetResult().ToString();
    }
    catch (HttpRequestException ex)
    {
        Assert.IsTrue(ex.Message.Contains("400"));
    }
}

不工作单元测试功能

[TestCategory("Account/Details")]
[TestMethod]
public void DisplayDetailsNegativeNoSessionKeyTest()
{
    try
    {
        string details = dmWeb.Account.Details().GetAwaiter().GetResult().ToString();
    }
    catch (HttpRequestException ex)
    {
        Assert.IsTrue(ex.Message.Contains("401"));
    }
}

1 个答案:

答案 0 :(得分:0)

只要不抛出任何错误,测试就会被视为成功。如果catch块中没有捕获到错误,这几乎肯定意味着您正在测试的代码不会引发任何错误。

所以在Assert.Fail()之后放置一个应该抛出错误的声明:

public void TestMethod()
{
    try
    {
        string details = ThingIAmTesting();
        // shouldn't get here
        Assert.Fail();
    }
    catch (Exception ex)
    {
        Assert.IsTrue(ex.Message.Contains("401");
    }
}