NSubstitute
NSubstitute copied to clipboard
The object is returned the second time
Hello everybody!
why is an empty object returned the first time? Please explain to me
using NSubstitute;
using System.Net;
using System.Reflection;
using Xunit;
using Assert = Xunit.Assert;
namespace RepositoryServiceTests
{
public class ApiResult<T>
{
public HttpStatusCode StatusCode { get; set; }
public T? Value { get; set; }
}
public abstract class BaseClass
{
protected virtual async Task<ApiResult<string>> DownloadFile(string path1, string path2)
{
var result = new ApiResult<string>();
await Task.CompletedTask;
return result;
}
}
public class SomeClass : BaseClass
{
public async Task<string?> Download(string path1, string path2)
{
var result1 = await DownloadFile(path1, path2); //return null. why???????????????????????????????
var result2 = await DownloadFile(path1, path2); //return object
return result2.Value;
}
}
public class TestClass
{
[Fact]
public async Task TestMethod()
{
// Arrange
var someClass = Substitute.For<SomeClass>();
var model = Task.FromResult(
new ApiResult<string>
{
StatusCode = HttpStatusCode.OK,
Value = "path to file"
});
var method = someClass.GetType().GetMethod("DownloadFile", BindingFlags.NonPublic | BindingFlags.Instance);
method!.Invoke(someClass, [Arg.Any<string>(), Arg.Any<string>()]).Returns(model);
// Act
var result = await someClass.Download(Arg.Any<string>(), Arg.Any<string>());
// Assert
Assert.NotNull(result);
}
}
}