相关疑难解决方法(0)

是Assert.Fail()被认为是不好的做法?

在使用TDD时我使用Assert.Fail很多.我通常一次只进行一次测试但是当我得到想要实现的东西的想法时,我会快速写一个空的测试,其中测试方法的名称表明我想要实现的todo-list.为了确保我不忘记我在主体中放置了一个Assert.Fail().

在尝试xUnit.Net时,我发现他们没有实现Assert.Fail.当然你总是可以Assert.IsTrue(false),但这并没有表达我的意图.我得到的印象是Assert.Fail没有故意实施.这被认为是不好的做法吗?如果是这样的话?


@Martin Meredith这不完全是我做的事.我先写一个测试,然后实现代码使它工作.通常我会同时考虑几个测试.或者我想在我正在做其他事情的时候写一个测试.那是我写一个空洞的失败测试来记住的时候.当我开始编写测试时,我整齐地尝试测试.

@Jimmeh这看起来是个好主意.忽略的测试不会失败,但它们仍会显示在单独的列表中.必须尝试一下.

@Matt Howells好主意.在这种情况下,NotImplementedException比assert.Fail()更好地传达意图

@Mitch Wheat这就是我想要的.它似乎被排除在外以防止它以另一种滥用它的方式被滥用.

unit-testing xunit.net

68
推荐指数
4
解决办法
7万
查看次数

在Xunit()中测试异常

我试图在这个方法上编写Xunit测试:

public async Task<IEnumerable<T>> RunSQLQueryAsync(string queryString)
{
    try
    {
        //do something
    }
    catch (DocumentClientException e)
    {
        throw new InvalidOperationException(e);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是单元测试:

[Fact]
public async virtual Task Test_Exception()
{
    var queryString = "SELECT * FROM c";
    var exception = Record.ExceptionAsync(async () => await classname.RunSQLQueryAsync(queryString));
    Assert.NotNull(exception);
    Assert.IsType<DocumentClientException>(exception);
}
Run Code Online (Sandbox Code Playgroud)

但该方法失败了,它说:

消息:Assert.IsType()预期失败:System.DocumentClientException实际:
System.Threading.Tasks.Task`1 [[System.Exception,System.Private.CoreLib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = xxx] ]

当我调试测试时,它不会进入catch块.所以我的问题是如何使单元测试期望方法RunSQLQueryAsyncDocumentClientException

c# unit-testing exception xunit azure-cosmosdb

4
推荐指数
1
解决办法
2543
查看次数

Utf8JsonReader.ToString 给出:无法获取令牌类型“None”的值

请注意,这是针对 System.Text.Json 而不是 Json.Net,因此如何对自定义 JsonConverter 进行单元测试不是重复的。

我喜欢对我的自定义 JsonConverter 进行单元测试:

using System.Text.Json;

public class DateTimeShortConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // support yyyy-MM-dd but also with times
        return DateTime.Parse(reader.GetString());
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString("yyyy-MM-dd"));
    }

Run Code Online (Sandbox Code Playgroud)

我需要一个Utf8JsonReader,并且我需要用一个来喂养那个string

我试过这个:

byte[] bytes = Encoding.UTF8.GetBytes("2019-01-02");
var reader = new Utf8JsonReader(bytes.AsSpan());
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但在执行以下操作时会导致转换器崩溃reader.GetString()

System.InvalidOperationException:无法以字符串形式获取令牌类型“None”的值。在 System.Text.Json.Utf8JsonReader.GetString()

应该reader.GetString()是正确的,请参阅微软的示例,所以我认为我喂Utf8JsonReader错了。

它 …

c# json .net-core system.text.json

3
推荐指数
1
解决办法
5241
查看次数