小编Geh*_*net的帖子

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

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

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

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

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

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

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

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

.net c# integration-testing unit-testing file

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

模拟存储库中的 DbSet<TEntity>

我想对具有模拟的存储库的检索方法进行单元测试DbContext,但我无法将模拟DbSet值设置到存储库。

存储库看起来像这样:

public class ChangeLogRepository : Repository<ChangeLog>, IChangeLogRepository
{
    public ChangeLogRepository(IDbContext context, long tenantId) : base(context, tenantId)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

基类:

public class Repository<TEntity> where TEntity : class {
    protected readonly IDbContext Context;
    protected DbSet<TEntity> Entities { get; set; }
    public long TenantId { get; set; }

    protected Repository(IDbContext context, long tenant)
    {
        Context = context;
        TenantId = tenant;
        Entities = Context.Set<TEntity>();
    }
    public List<TEntity> GetAll()
    {
        return Entities.ToList();
    }
    //..
}
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的一点是测试类:

[TestClass]
public class …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing entity-framework moq asp.net-core-mvc

5
推荐指数
1
解决办法
4236
查看次数

在输入时调整文本区域的大小

我想创建一个自动增长的 textarea,所以我使用了这个指南。它运行良好,但有一个小问题。当您插入大文本并删除它们时,textarea 的大小比它应该有的要大。每插入一个字符,尺寸就会减少 1-2 像素,所以插入几个字符后,高度又恢复了。

要重新创建磨损的滚动高度,请将 'a \n b \n c \n d \n e' 插入文本区域。现在将其全部删除。textarea 保持比现在需要的更大的大小。对于每个插入的字符,textarea 都会将其大小调整为正确的值。

$("#message-box").on('input', function() {
  var scroll_height = $("#message-box").get(0).scrollHeight;
  $("#message-box").css('height', scroll_height + 'px');

  $("body > p").remove();
  $("body").append("<p>ScrollHeight: " + scroll_height + "</p>");
});
Run Code Online (Sandbox Code Playgroud)
#message-box {
  resize: none;
  width: 400px;
  min-height: 20px;
  padding: 5px;
  overflow: hidden;
  box-sizing: border-box;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="message-box"></textarea>
Run Code Online (Sandbox Code Playgroud)

这是 CodePen 中的示例

如何在删除大文本后立即将 textarea 调整为可能的最小值?

html javascript css textarea

4
推荐指数
1
解决办法
1032
查看次数