0

flurlを使用しており、以下のコードを単体テストしようとしています。

public class MyRestClient
{
    public async Task<T> Request<T>(IFlurlRequest flurlRequest)
    {
        try  
        {
            return await flurlRequest
                    .WithOAuthBearerToken("my-hardcoded-token")
                    .GetAsync()
                    .ReceiveJson<T>();  
        }
        catch(HttpFlurlException)
        {
            throw new MyCustomException();
        }
    }
}

私がテストしたいのは、flurlRequestがタイプの例外をスローするHttpFlurlExceptionと、 がスローされるということMyCustomExceptionです。私の考えは、 moq しflurlrequestて例外をスローすることです。これが私のテストのレイアウト方法です:

var moq = Substitute.For<IFlurlRequest>();
// Problem is with line below:
moq.When(x => x.WithOAuthBearerToken("dummy")).Do(x => { throw new HttpFlurlException(); } );

var myClient = new MyRestClient();

Func<Task> call = async () => { await myClient.Request<object>(moq); };

// FluentAssertions
call.Should().Throw<MyCustomException>();

コードを実行すると、NullReferenceException が返されます。

Exception has occurred: CLR/System.NullReferenceException
An exception of type 'System.NullReferenceException' occurred in 
Flurl.Http.dll but was not handled in user code: 'Object reference not 
set to an instance of an object.'
at Flurl.Http.HeaderExtensions.WithHeader[T](T clientOrRequest, String name, Object value)

それで、ヘッダーに関連するものがあることがわかります...だから、追加してそれをモックしようとしました:

var moq = Substitute.For<IFlurlRequest>();
moq.Headers.Returns(new Dictionary<string, object> { {"dummy", new {} };

しかし、私は常に同じ例外を受けています。私は何を間違っていますか?

4

1 に答える 1