Nov*_*orm 3 c# unit-testing visual-studio visual-studio-2013
在工作中,我被要求增加我们在其中一个软件产品中的代码覆盖率.我以前从未进行过单元测试,并且已经在线阅读过一些教程; 这些都是有用的起点,但都遵循相同的模式 - 他们正在测试非常简单的方法/类,如计算器或银行帐户.
我在代码中找到了一个简单的方法来启动,但问题是它仍然比我读过的例子复杂得多,我不确定从哪里开始.这是方法:
public static void moveFiles {
string rootDir = ConfigurationManager.AppSettings["RootLoc"];
string dropboxLoc = ConfigurationManager.AppSettings["DropBoxLocation"];
DirectoryInfo dropbox = new DirectoryInfo(dropboxLoc);
folders = dropbox.GetDirectories("*", SearchOption.AllDirectories);
string path = "";
string prevPath = "";
foreach (DirectoryInfo di in folders)
{
FileInfo[] files = di.GetFiles();
foreach (FileInfo fi in files)
{
prevPath = fi.FullName;
string[] p = prevPath.Split(new string[] { dropbox.Name }, StringSplitOptions.None);
path = rootDir + p[1];
fi.MoveTo(path);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我为此创建了一个小测试方法:
[TestMethod]
public void GetDirectories_ValidLocation_SetsDropboxLocation()
{
string dropboxLoc = ConfigurationManager.AppSettings["DropBoxLocation"];
DirectoryInfo dropbox = new DirectoryInfo(dropboxLoc);
Assert.IsTrue(dropbox.Exists);
}
Run Code Online (Sandbox Code Playgroud)
这是沿着应该测试的正确线路吗?或者我是以错误的方式看待这个?
您的单元测试应该测试该方法是否按预期执行.您的moveFiles方法应该移动文件,因此您需要测试它是否移动文件.
这是如何做到的:
在测试项目的app.config中,设置RootLoc并DropBoxLocation测试目录.
在你的测试方法中:
一个.通过在RootLoc中创建一些测试文件来设置测试环境.确保DropBoxLocation为空.
湾 调用你的moveFiles方法.
C.断言DropBoxLocation包含您期望的文件.
d.清理(即删除测试文件).
理想地,步骤a和d可分别在TestInitialize和TestCleanup方法中完成.此外,您可能希望将方法拆分为两种方法:
public static void moveFiles(string source, string destination)
{
...
}
public static void moveFiles()
{
moveFiles(ConfigurationManager.AppSettings["RootLoc"],
ConfigurationManager.AppSettings["DropBoxLocation"]);
}
Run Code Online (Sandbox Code Playgroud)
这将允许您独立测试moveFiles方法,而不依赖于外部配置文件.这是依赖注入的一个非常简单的例子- 如果你的方法难以测试,你可能想要阅读它.
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |