我正在为一个管理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) 我正在尝试使用::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)在我的域对象中,我将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当我在测试中得到它时总是为空.
到目前为止,我使用 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 一起导入,但这似乎不是一个好的解决方案
我已经实现了一个用于存储标记的类,标记集合必须是层次化的,所以我的类是:
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)
这样,根标签(用户希望能够拥有许多单独的树)没有父标记,而非根标记必须具有父标记.
这是实现层次结构的好方法吗?我发现复合模式,但在我的域中,所有标签都只是标签,对于域专家,父标签和子标签之间没有区别.
在测试中使用AutoFixture会出现问题; 当我需要创建一个简单的标签时,它会引发这个错误:
失败::
Ploeh.AutoFixture.ObjectCreationExceptionAutoFixture无法创建类型的实例,Ploeh.AutoFixture.Kernel.SeededRequest因为遍历的对象图包含循环引用.
编辑:我阅读使用AutoFixture创建递归树,但它是不同的情况:我只有一个类,而不是2,我不希望自动混合创建一个树,但只有一个节点
我试图用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:
我在测试中有一个简单的安装方法,它可以创建一个对象的两个实例(由和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) 我正在尝试在来自 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)
但现在我没有找到返回元组的方法
我也试试
(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)
但我得到了 …
也许这是一个愚蠢的问题,但我坚持下去.
我试图在整个应用程序中使用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# ×6
autofixture ×2
css ×2
unit-testing ×2
collections ×1
css-grid ×1
dart-sass ×1
hierarchy ×1
html ×1
linq ×1
nhibernate ×1
properties ×1
readonly ×1
sass ×1
sql ×1
tdd ×1
tuples ×1