小编mat*_*i82的帖子

如何在.NET中使用真实文件进行集成测试?

我有一些类实现了一些与文件系统和文件相关的逻辑.例如,我正在执行以下任务作为此逻辑的一部分:

  • 检查某个文件夹是否具有某种结构(例如,它包含具有特定名称的子文件夹等)
  • 从这些文件夹中加载一些文件并检查它们的结构(例如,这些是一些配置文件,位于某个文件夹中的某个位置)
  • 从配置文件中加载用于测试/验证的其他文件(例如,此配置文件包含有关同一文件夹中其他文件的信息,应具有其他内部结构等...)

现在所有这些逻辑都有一些工作流程,如果某些东西不正确(例如,在特定文件夹位置找不到配置文件),则抛出异常.此外,还有Managed Extensibility Framework(MEF)涉及此逻辑,因为我检查的其中一些文件是我手动加载到MEF聚合等的托管DLL ...

现在我想以某种方式测试所有这些.我想在HDD上创建几个物理测试文件夹,涵盖各种测试用例,然后针对它们运行我的代码.我可以创建例如:

  • 文件夹结构正确,所有文件都有效
  • 文件夹结构正确但配置文件无效
  • 文件夹结构正确但缺少配置文件等...

这是正确的方法吗?我不确定在这种情况下如何运行我的代码...我当然不想运行整个应用程序并指向它来检查这些模拟的文件夹.我应该使用一些单元测试框架来编写一种"单元测试",它会针对这些文件系统对象执行我的代码吗?

总的来说,对于这种测试场景,这一切都是正确的方法吗?还有其他更好的方法吗?

.net c# integration-testing unit-testing file

58
推荐指数
2
解决办法
4万
查看次数

19
推荐指数
2
解决办法
4万
查看次数

除了某些情况下的关键异常外,是否可以吞下所有异常?

在某些情况下,我只想调用某个方法来完成某些工作,而不关心处理它可以抛出的所有特定异常.相反,我真正关心的是方法是否成功.

我将提供一个.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)

.net c# exception-handling exception

19
推荐指数
3
解决办法
1985
查看次数

WPF:是否可以在UniformGrid中执行行/列跨度?

是否可以在UniformGrid中执行行/列跨度?使用网格附加属性

Grid.RowSpan

Grid.ColumnSpan

在UniformGrid上不起作用.

wpf xaml row uniformgrid

17
推荐指数
1
解决办法
9482
查看次数

在WPF应用程序中放置和配置IoC容器的位置?

我正在研究中型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应用程序.

wpf containers inversion-of-control unity-container where

15
推荐指数
2
解决办法
6015
查看次数

如何查看工作目录和暂存索引之间的差异?

我们可以看到存储库和工作目录之间的区别:

git diff
Run Code Online (Sandbox Code Playgroud)

我们可以看到存储库和登台索引之间的区别:

git diff --staged
Run Code Online (Sandbox Code Playgroud)

但是我们如何看待工作目录和登台索引之间的区别?

git git-diff

14
推荐指数
2
解决办法
6756
查看次数

WPF:如何动态生成ContextMenu

我有ListBox(带SelectionMode =扩展)有多个项目,我想添加上下文菜单功能.问题是如何根据某些条件动态创建上下文菜单.例如.如果只选择了一个项目,我想显示常规上下文菜单,但是当选择多个项目时,显示其他上下文菜单(例如,添加了一些新项目).另外,如果所选项目中至少有一个具有一些属性集,我想创建第三种上下文菜单.等等......可能有多种这样的条件.

基本上我需要在用户右键单击鼠标按钮之后立即动态生成上下文菜单,但实际显示菜单之前.这可能吗?

wpf contextmenu

13
推荐指数
3
解决办法
3万
查看次数

我应该抓住并包装一般的例外吗?

以下代码可以被视为一种良好做法吗?如果没有,为什么?

try
{
    // code that can cause various exceptions...
}
catch (Exception e)
{
    throw new MyCustomException("Custom error message", e);
}
Run Code Online (Sandbox Code Playgroud)

.net c# exception-handling exception

13
推荐指数
4
解决办法
4232
查看次数

在C#中处理文件时如何正确处理异常

我已经阅读了许多关于正确异常处理的博客/文章/书籍章节,但这个主题仍然不清楚.我将尝试用以下示例来说明我的问题.

考虑具有以下要求的类方法:

  1. 接收文件路径列表作为参数
  2. 读取每个文件的文件内容,如果尝试这样做有任何问题,请跳过
  3. 返回表示文件内容的对象列表

所以规格很简单,这就是我开始编码的方式:

    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.表示该方法应该"跳过因某些原因无法读取内容的任何文件".因此可能有许多不同的原因(例如,文件不存在,文件访问由于缺乏安全权限而被拒绝,文件被锁定并被其他应用程序使用等等)但重点是我应该不在乎原因是什么,我只想尽可能读取文件的内容,否则就跳过文件.我不在乎错误是什么......

那么如何正确实现这个方法呢? …

.net c# exception-handling exception

12
推荐指数
2
解决办法
9615
查看次数

如何从C#.NET 4.5中的zip存档中提取特定目录?

我有以下内部结构的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 c# compression zip

10
推荐指数
1
解决办法
1万
查看次数