小编gt.*_*ush的帖子

测试删除方法而不调用Add方法

我正在为一个管理Tag对象树的类编写测试:

public class Tag
{
    public virtual int Id { get; set; }
    public virtual string Description{ get; set; }
    private IList<Tag> children = new List<Tag>();
    public virtual IEnumerable<Tag> Children
    {
        get {return children .ToArray();}
    }
    public void AddChildTag(Tag child)
    {
        children.Add(child);
    }
    public void RemoveChildTag(Tag child)
    {
        children.Remove(child);
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以看到设置父属性的唯一模式是通过AddChildTag方法,这正是我想要的,我的问题是在单元测试中:因为每个测试都应该是原子的,我该如何测试RemoveChildTag方法?

我看到的唯一方法是调用add方法,然后调用remove,但是这样如果Add为某些错误,即使remove的测试也会失败,因此原子性会丢失.

怎么办?

编辑
我从Tag对象中删除了父属性,因为我不再使用它根据使用NUnit和FluentAssertion的解决方案进行一些测试

    [Test]
    public void AddChildTagAddsChildren()
    {
        //Arrange
        Tag parent = new Tag();
        Tag child = new Tag();
        //Act
        parent.AddChildTag(child);
        //Assert
        parent.Children.Should().Contain(child); …
Run Code Online (Sandbox Code Playgroud)

c# tdd unit-testing

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

::第一个字母选择器 - 与Firefox相比,IE11具有不同的布局

我正在尝试使用::first-letterCSS选择器设置标题样式,但我有奇怪的布局导致Internet Explorer 11.

代码很简单:JSFiddle.

h2.titoloPagina::first-letter {
  color: #1d5987;
  display: block;
  float: left;
  font-family: Bell MT !important;
  font-size: 70px;
  /* margin-top: -15px;*/
  padding-right: 3px;
}
h2.titoloPagina span {
  border-bottom: 7px solid #1d5987;
  color: #538cc3;
  font-family: Bell MT !important;
  font-size: 30px !important;
  letter-spacing: 0;
  margin-left: 4px;
  padding-bottom: 5px;
}

/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */

/**
 * 1. Set default font family to sans-serif (opinionated).
 * 2. Prevent iOS and IE text size adjust after …
Run Code Online (Sandbox Code Playgroud)

html css pseudo-element

8
推荐指数
1
解决办法
861
查看次数

如何返回一个空的ReadOnlyCollection

在我的域对象中,我将1:M关系映射到IList属性.

为了获得良好的隔离,我以这种方式将其设为只读:

private IList<PName> _property;
public ReadOnlyCollection<PName> Property
{
    get
    {
        if (_property!= null)
        {
            return new ReadOnlyCollection<PName>(new List<PName>(this._property));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不太喜欢ReadOnlyCollection,但没有找到使集合成为只读的接口解决方案.

现在我想编辑属性声明,使其返回空列表,而不是null当它为空时,所以我用这种方式编辑它:

if (_property!= null)
{
    return new ReadOnlyCollection<PName>(new List<PName>(this._property));
}
else
{
    return new ReadOnlyCollection<PName>(new List<PName>());
}
Run Code Online (Sandbox Code Playgroud)

但是Property当我在测试中得到它时总是为空.

c# collections properties readonly

7
推荐指数
2
解决办法
4285
查看次数

如何使用 Visual Studio 2019 编译 Dart Sass

到目前为止,我使用 Mads Kristensen 的 Web 编译器,但现在我在编译新的 sass 命令(如 @use)或使用一些 css 计算(如)时遇到问题

grid-template-columns:repeat(auto-fill,minmax(max(200px,(100% - (var(--n) - 1)*10px)/var(--n)),1fr));
Run Code Online (Sandbox Code Playgroud)

我发现了 sass 的新实现:Dart Sass 但没有找到任何扩展来在 Visual Studio 中管理它,只有一些用于 Visual Studio 代码

Web 编译器上次更新是在 2018 年

我也尝试Sass 编译器,但得到相同的编译错误:

200px,(100% - (var(--n) - 1)*10px)/var(--n) 不是正确的 max 值

即使它是纯粹的工作CSS,也许它太新并且编译器无法识别它

目前唯一的方法是将该规则放入纯 css 文件中,并将其与 sass 生成的 css 一起导入,但这似乎不是一个好的解决方案

css sass css-grid visual-studio-2019 dart-sass

6
推荐指数
1
解决办法
2048
查看次数

分层对象和AutoFixture

我已经实现了一个用于存储标记的类,标记集合必须是层次化的,所以我的类是:

public class Tag
{
    public int Id { get; set; }
    public int Description { get; set; }
    public Tag ParentTag { get; set; }
    // … (methods for get children, add and remove children, etc.)
}
Run Code Online (Sandbox Code Playgroud)

这样,根标签(用户希望能够拥有许多单独的树)没有父标记,而非根标记必须具有父标记.

  1. 这是实现层次结构的好方法吗?我发现复合模式,但在我的域中,所有标签都只是标签,对于域专家,父标签和子标签之间没有区别.

  2. 在测试中使用AutoFixture会出现问题; 当我需要创建一个简单的标签时,它会引发这个错误:

    失败:: Ploeh.AutoFixture.ObjectCreationExceptionAutoFixture无法创建类型的实例,Ploeh.AutoFixture.Kernel.SeededRequest因为遍历的对象图包含循环引用.

编辑:我阅读使用AutoFixture创建递归树,但它是不同的情况:我只有一个类,而不是2,我不希望自动混合创建一个树,但只有一个节点

c# hierarchy circular-reference autofixture

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

Visual Studio 2013 SSDT - 编辑数据 - IS NULL不能用作过滤器

我试图用ssdt过滤表的某些行(左键单击表,查看数据,排序和过滤)

在这里,我只需要添加IS NULL一个条件到一个nvarchar字段.
但是一旦我应用过滤器,我就会收到错误:

关键字SET附近的语法不正确

看看编辑写的查询,我看到了这个问题fldName =,没有我NULL支票的迹象

我该怎么做?

这是结果:

SELECT TOP 1000 [Ktyi_TS002_IdTipoDocumento] ,
[nvc_TS002_TipoDocumento] ,[nvc_TS002_IdFunzioneControllo] ,[bit_TS002_Annullato] 
FROM [dbo].[TS002_TipoDocumento] 
WHERE [nvc_TS002_IdFunzioneControllo] =
Run Code Online (Sandbox Code Playgroud)

这是在谷歌中找到的数据编辑器的一些图像,以显示我们在谈论谁不知道ssdt:

在此输入图像描述

在此输入图像描述

sql visual-studio sql-server-data-tools

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

如何告诉Autofixture创建具有不同ID的对象?

我在测试中有一个简单的安装方法,它可以创建一个对象的两个实例(由和Id以及一个Description属性),并且已经通过自动修复完成了:

MyObject o1 = fixture.Create<MyObject>();
MyObject o2 = fixture.Create<MyObject>();
Run Code Online (Sandbox Code Playgroud)

接下来,我尝试将对象保存到db,但是出现重复密钥错误,我调试了安装程序,并看到o1和o2具有相同的含义 Id

根据Wiki,编号应逐步生成:

Autogenerated Number

int autoGeneratedNumber = fixture.Create<int>();

Sample Result

int: 1, followed by 2, then by 3, etc.
Run Code Online (Sandbox Code Playgroud)

但似乎id不能以这种方式与对象属性一起工作,所以现在我使用以下简单的解决方法:

MyObject o1= fixture.Build<MyObject>().With(x => x.Id, 1).Create();
MyObject o2= fixture.Build<MyObject>().With(x => x.Id, 2).Create();
Run Code Online (Sandbox Code Playgroud)

但不是很喜欢

这是一种ISpecimenBuilder用于设置自动装置以使其生成渐进ID的方法吗?

更多信息:

这是我的基础测试课:

public class BaseDBTest
{       
    public BaseDBTest()
    { }
    public Ploeh.AutoFixture.Fixture fixture { get { return new Fixture(); } }
}
Run Code Online (Sandbox Code Playgroud)

和测试设置:

[TestFixture]
public class MyObjectTests : …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing autofixture

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

c#从linq join返回命名元组

我正在尝试在来自 nhibernate envers 的修订实体和包含用户名的列表之间执行连接。我想返回一个命名元组列表。

这是我的代码

public IEnumerable<(Societa company, DateTime datetime, string userName)> CompanyHistory()
{
    IAuditReader auditReader = this._session.Auditer();
    var revison = auditReader.CreateQuery().ForHistoryOf<Societa, RevisionEntity>().Results();
    IList<Persona> user = _session.QueryOver<Persona>().List();

    var query = revison.Join(user,
                        rev => rev.RevisionEntity.IdUtente,
                        us => us.Id,
                        (rev, us) => new
                        {
                            Oggetto = rev.RevisionEntity,
                            DataModifica = rev.RevisionEntity.RevisionDate.ToLocalTime(),
                            NomeUtente = us.NomePersona
                        }).ToList();
}
Run Code Online (Sandbox Code Playgroud)

但现在我没有找到返回元组的方法

  • 演员表没用
  • ToValueTuple 无法用于我的查询对象

我也试试

(ele, p) => new (OutputGA Oggetto, DateTime DataModifica, string NomeUtente)
            {
                Oggetto = ele.RevisionEntity,
                DataModifica = ele.RevisionEntity.RevisionDate.ToLocalTime(),
                NomeUtente = p.NomePersona
            }).ToList();
Run Code Online (Sandbox Code Playgroud)

但我得到了 …

c# linq nhibernate tuples nhibernate-envers

2
推荐指数
1
解决办法
1178
查看次数

如何在数据层中使用Caliburn.Micro SimpleContainer

也许这是一个愚蠢的问题,但我坚持下去.

我试图在整个应用程序中使用SimpleContainer作为IoC,因此在我的数据访问层中,我以这种方式定义了一个引导程序:

    public class AppBootstrapper : BootstrapperBase 
    {
        SimpleContainer container;

        public AppBootstrapper()
        {
            Start();
        }

        protected override void Configure()
        {
            container = new SimpleContainer();
            container.PerRequest<IMyClass, MyClass>();
        }

        protected override object GetInstance(Type service, string key)
        {
            var instance = container.GetInstance(service, key);
            if (instance != null)
                return instance;

            throw new InvalidOperationException("Could not locate any instances.");
        }
Run Code Online (Sandbox Code Playgroud)

但是我怎么能用呢?

我只想获得一个实现并尝试编写:

IMyClass mc = new IoC.GetInstance(IMyClass );
Run Code Online (Sandbox Code Playgroud)

但我没有找到怎么样

我试过了:

SimpleContainer container = new SimpleContainer();
IMyClass mc = new container.GetInstance(IMyClass,null);
Run Code Online (Sandbox Code Playgroud)

和:

IMyClass mc = new IoC.GetInstance(IMyClass, …
Run Code Online (Sandbox Code Playgroud)

c# inversion-of-control caliburn.micro

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