我已经编写了一个将文件上传到云存储的代码。该代码包含一个 post 方法,该方法采用以下格式的文件:multipart/form-data 并将其上传到云。那么我怎样才能写一个相同的测试用例呢?具体来说,如何模拟该帖子文件。
使用的格式是 formfile 代码在 asp.net core 3.1 中使用 c#。
我已经编写了一个将文件上传到云存储的代码。该代码包含一个 post 方法,该方法采用以下格式的文件:multipart/form-data 并将其上传到云。那么我怎样才能写一个相同的测试用例呢?具体来说,如何模拟该帖子文件。
使用的格式是 formfile 代码在 asp.net core 3.1 中使用 c#。
我建议在这里使用抽象,你应该创建一个像下面这样的接口 -
Public Interface IFileSystem{
bool uploadFile(FileStrem fileContent);
}
然后在上述类的派生中编写您的云特定实现,然后
在您的业务逻辑中使用该实现,因此当您为业务逻辑编写测试时,您可以模拟文件系统。
在我工作的公司中,“Mocking”从未真正看得太好。
通常编写测试实现效果更好:
public interface IUploader
{
IResult Upload(string filePath);
}
public sealed class FileUploader
{
IResult Upload(string filePath) { ... } // method is implemented as expected
}
public sealed class TestUploader //this is placed in a specific folder for test implementations
{
public IResult ExpectedResult { get; set; } = Result.Success();
IResult Upload(string filePath) => ExpectedResult;
}
要将它与您的班级联系起来,请检查Humble Object Design Pattern。它解释了如何从明显不可测试的类中提取可测试的逻辑。
void UploadToCloud(string filePath)
{
...
Uploader.Upload(filePath); // real implementation in production code, test implementation during unit testing.
...
}
出于多种原因,我更喜欢这种方式:
注意:如果要测试接收部分,可以使用相同的策略。您的测试实施将包含文件的预期内容,以测试云响应。