我有一些类实现了一些与文件系统和文件相关的逻辑.例如,我正在执行以下任务作为此逻辑的一部分:
现在所有这些逻辑都有一些工作流程,如果某些东西不正确(例如,在特定文件夹位置找不到配置文件),则抛出异常.此外,还有Managed Extensibility Framework(MEF)涉及此逻辑,因为我检查的其中一些文件是我手动加载到MEF聚合等的托管DLL ...
现在我想以某种方式测试所有这些.我想在HDD上创建几个物理测试文件夹,涵盖各种测试用例,然后针对它们运行我的代码.我可以创建例如:
这是正确的方法吗?我不确定在这种情况下如何运行我的代码...我当然不想运行整个应用程序并指向它来检查这些模拟的文件夹.我应该使用一些单元测试框架来编写一种"单元测试",它会针对这些文件系统对象执行我的代码吗?
总的来说,对于这种测试场景,这一切都是正确的方法吗?还有其他更好的方法吗?
标题总结了我的问题.一个证明这一点的例子很好.
在某些情况下,我只想调用某个方法来完成某些工作,而不关心处理它可以抛出的所有特定异常.相反,我真正关心的是方法是否成功.
我将提供一个.NET/C#示例.假设我有一个我要复制的文件,我真正关心的是复制操作是否成功.如果复制失败,我不在乎特定异常是FileNotFoundException还是IOException"没有足够的磁盘空间"异常或其他...在这种情况下我的应用程序将正常运行,因为此操作并不重要.
所以如何实现这个的想法是:
try
{
// try
System.IO.File.Copy(strFile, strFile + ".new");
}
catch (Exception ex)
{
// if critical exception then rethrow
if (IsCritical(ex))
throw;
// else just log and swallow...
Console.WriteLine("Failed to copy the file: " + ex.Message);
}
Run Code Online (Sandbox Code Playgroud)
其中IsCritical(Exception ex)是辅助方法,定义如下:
public static bool IsCritical(Exception ex)
{
if (ex is OutOfMemoryException) return true;
if (ex is AppDomainUnloadedException) return true;
if (ex is BadImageFormatException) return true;
if (ex is CannotUnloadAppDomainException) return true;
if (ex is ExecutionEngineException) return true;
if (ex …Run Code Online (Sandbox Code Playgroud) 是否可以在UniformGrid中执行行/列跨度?使用网格附加属性
Grid.RowSpan
和
Grid.ColumnSpan
在UniformGrid上不起作用.
我正在研究中型WPF应用程序(MVVM),该应用程序将来应该是可扩展和可维护的.因此,我决定使用IoC容器(在本例中为Unity)来保持灵活性.
但是我不确定在WPF应用程序中放置和配置Unity的位置.
我想容器应该是全局可访问的,所以应该可以去Application类.但是我应该把它作为静态属性吗?我应该在Application_Startup()事件处理程序中配置它吗?
例如:
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public static UnityContainer MyUnityContainer;
private void Application_Startup(object sender, StartupEventArgs e)
{
// instantiate and configure Unity
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就能通过static属性从应用程序的任何地方访问容器:
App.MyUnityContainer
Run Code Online (Sandbox Code Playgroud)
我想这是一种方法,但我不确定这个问题是否有更好的做法,特别是对于WPF应用程序.
我们可以看到存储库和工作目录之间的区别:
git diff
Run Code Online (Sandbox Code Playgroud)
我们可以看到存储库和登台索引之间的区别:
git diff --staged
Run Code Online (Sandbox Code Playgroud)
但是我们如何看待工作目录和登台索引之间的区别?
我有ListBox(带SelectionMode =扩展)有多个项目,我想添加上下文菜单功能.问题是如何根据某些条件动态创建上下文菜单.例如.如果只选择了一个项目,我想显示常规上下文菜单,但是当选择多个项目时,显示其他上下文菜单(例如,添加了一些新项目).另外,如果所选项目中至少有一个具有一些属性集,我想创建第三种上下文菜单.等等......可能有多种这样的条件.
基本上我需要在用户右键单击鼠标按钮之后立即动态生成上下文菜单,但实际显示菜单之前.这可能吗?
以下代码可以被视为一种良好做法吗?如果没有,为什么?
try
{
// code that can cause various exceptions...
}
catch (Exception e)
{
throw new MyCustomException("Custom error message", e);
}
Run Code Online (Sandbox Code Playgroud) 我已经阅读了许多关于正确异常处理的博客/文章/书籍章节,但这个主题仍然不清楚.我将尝试用以下示例来说明我的问题.
考虑具有以下要求的类方法:
所以规格很简单,这就是我开始编码的方式:
public class FileContent
{
public string FilePath { get; set; }
public byte[] Content { get; set; }
public FileContent(string filePath, byte[] content)
{
this.FilePath = filePath;
this.Content = content;
}
}
static List<FileContent> GetFileContents(List<string> paths)
{
var resultList = new List<FileContent>();
foreach (var path in paths)
{
// open file pointed by "path"
// read file to FileContent object
// add FileContent to resultList
// close file
}
return resultList;
}
Run Code Online (Sandbox Code Playgroud)
现在请注意,规范中的2.表示该方法应该"跳过因某些原因无法读取内容的任何文件".因此可能有许多不同的原因(例如,文件不存在,文件访问由于缺乏安全权限而被拒绝,文件被锁定并被其他应用程序使用等等)但重点是我应该不在乎原因是什么,我只想尽可能读取文件的内容,否则就跳过文件.我不在乎错误是什么......
那么如何正确实现这个方法呢? …
我有以下内部结构的zip文件:
file1.txt
directoryABC
fileA.txt
fileB.txt
fileC.txt
Run Code Online (Sandbox Code Playgroud)
将文件从"directoryABC"文件夹中提取到硬盘上的目标位置的最佳方法是什么?例如,如果目标位置是"C:\ temp",那么其内容应为:
temp
directoryABC
fileA.txt
fileB.txt
fileC.txt
Run Code Online (Sandbox Code Playgroud)
此外,在某些情况下,我只想提取"directoryABC"的内容,结果将是:
temp
fileA.txt
fileB.txt
fileC.txt
Run Code Online (Sandbox Code Playgroud)
如何通过在C#.NET 4.5中使用System.IO.Compression中的类来实现此目的?
.net ×5
c# ×5
exception ×3
wpf ×3
anonymous ×1
compression ×1
containers ×1
contextmenu ×1
file ×1
function ×1
git ×1
git-diff ×1
inline ×1
javascript ×1
row ×1
uniformgrid ×1
unit-testing ×1
where ×1
xaml ×1
zip ×1