1.添加测试文件2.添加文件下载接口实现
This commit is contained in:
@@ -1,92 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
using RestSharp;
|
||||
|
||||
namespace Hua.DotNet.Code.Helper.Http
|
||||
{
|
||||
public class RestClientHttpHelperTests
|
||||
{
|
||||
[Test]
|
||||
public void DownloadFile_ShouldReturnTrue_WhenDownloadSucceeds()
|
||||
{
|
||||
// Arrange
|
||||
var loggerMock = new Mock<ILogger<RestClientHttpHelper>>();
|
||||
var helper = new RestClientHttpHelper(loggerMock.Object);
|
||||
var testUrl = "https://example.com/testfile.txt";
|
||||
var testFilePath = Path.GetTempFileName();
|
||||
|
||||
var restClientMock = new Mock<RestClient>();
|
||||
var responseData = System.Text.Encoding.UTF8.GetBytes("Test content");
|
||||
restClientMock.Setup(c => c.DownloadData(It.IsAny<RestRequest>())).Returns(responseData);
|
||||
|
||||
var type = helper.GetType();
|
||||
var getHttpClientMethod = type.GetMethod("GetHttpClient", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||
var mockGetter = new Func<RestClient>(() => restClientMock.Object);
|
||||
|
||||
var mockMethod = mockGetter.Method;
|
||||
var mockInstance = mockGetter.Target;
|
||||
|
||||
var proxy = new DynamicProxy(helper, getHttpClientMethod, mockMethod, mockInstance);
|
||||
|
||||
// Act
|
||||
var result = helper.DownloadFile(testUrl, testFilePath);
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Is.True);
|
||||
Assert.That(File.Exists(testFilePath), Is.True);
|
||||
File.Delete(testFilePath);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DownloadFile_ShouldReturnFalse_WhenDownloadFails()
|
||||
{
|
||||
// Arrange
|
||||
var loggerMock = new Mock<ILogger<RestClientHttpHelper>>();
|
||||
var helper = new RestClientHttpHelper(loggerMock.Object);
|
||||
var testUrl = "https://example.com/nonexistentfile.txt";
|
||||
var testFilePath = Path.GetTempFileName();
|
||||
|
||||
var restClientMock = new Mock<RestClient>();
|
||||
restClientMock.Setup(c => c.DownloadData(It.IsAny<RestRequest>())).Returns((byte[])null);
|
||||
|
||||
var type = helper.GetType();
|
||||
var getHttpClientMethod = type.GetMethod("GetHttpClient", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||
var mockGetter = new Func<RestClient>(() => restClientMock.Object);
|
||||
|
||||
var mockMethod = mockGetter.Method;
|
||||
var mockInstance = mockGetter.Target;
|
||||
|
||||
var proxy = new DynamicProxy(helper, getHttpClientMethod, mockMethod, mockInstance);
|
||||
|
||||
// Act
|
||||
var result = helper.DownloadFile(testUrl, testFilePath);
|
||||
|
||||
// Assert
|
||||
Assert.That(result, Is.False);
|
||||
Assert.That(File.Exists(testFilePath), Is.False);
|
||||
}
|
||||
}
|
||||
|
||||
public class DynamicProxy
|
||||
{
|
||||
private readonly object _target;
|
||||
private readonly System.Reflection.MethodInfo _originalMethod;
|
||||
private readonly System.Reflection.MethodInfo _mockMethod;
|
||||
private readonly object _mockInstance;
|
||||
|
||||
public DynamicProxy(object target, System.Reflection.MethodInfo originalMethod, System.Reflection.MethodInfo mockMethod, object mockInstance)
|
||||
{
|
||||
_target = target;
|
||||
_originalMethod = originalMethod;
|
||||
_mockMethod = mockMethod;
|
||||
_mockInstance = mockInstance;
|
||||
}
|
||||
|
||||
public object Invoke(object[] parameters)
|
||||
{
|
||||
return _mockMethod.Invoke(_mockInstance, parameters);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -77,12 +78,12 @@ public class RestClientHttpHelper : IHttpHelper
|
||||
var client = GetHttpClient();
|
||||
var request = new RestRequest(url, Method.Get);
|
||||
var response = client.DownloadData(request);
|
||||
if (response != null)
|
||||
{
|
||||
System.IO.File.WriteAllBytes(fileFullName, response);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
if (response == null) return false;
|
||||
|
||||
var dir = Path.GetDirectoryName(fileFullName);
|
||||
Directory.CreateDirectory(dir);
|
||||
File.WriteAllBytes(fileFullName, response);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user