注意:当C#尚未支持可选参数时(即在C#4之前),就会询问此问题.
我们正在构建一个通过C#类以编程方式生成的Web API.该类有方法GetFooBar(int a, int b),API有一个GetFooBar接受查询参数的方法&a=foo &b=bar.
这些类需要支持可选参数,C#语言不支持这些参数.什么是最好的方法?
我试图断言一个对象与另一个对象"相等".
对象只是具有一堆公共属性的类的实例.是否有一种简单的方法让NUnit基于属性断言相等?
这是我目前的解决方案,但我认为可能有更好的方法:
Assert.AreEqual(LeftObject.Property1, RightObject.Property1)
Assert.AreEqual(LeftObject.Property2, RightObject.Property2)
Assert.AreEqual(LeftObject.Property3, RightObject.Property3)
...
Assert.AreEqual(LeftObject.PropertyN, RightObject.PropertyN)
Run Code Online (Sandbox Code Playgroud)
我想要的是与CollectionEquivalentConstraint一样的精神,其中NUnit验证两个集合的内容是否相同.
我有一个NameValueCollection,并希望迭代值.目前,我正在这样做,但似乎应该有一个更简洁的方法来做到这一点:
NameValueCollection nvc = new NameValueCollection();
nvc.Add("Test", "Val1");
nvc.Add("Test2", "Val1");
nvc.Add("Test2", "Val1");
nvc.Add("Test2", "Val2");
nvc.Add("Test3", "Val1");
nvc.Add("Test4", "Val4");
foreach (string s in nvc)
foreach (string v in nvc.GetValues(s))
Console.WriteLine("{0} {1}", s, v);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
在那儿?
随着从VS2017引入project.json的新csproj格式的转变,我正在努力理解dotnetcli和new 之间的区别msbuild以及何时使用另一个.
1)要csproj从命令行构建新的netstandard库,我应该调用dotnetcli(例如dotnet restore dotnet build)还是使用msbuild(例如msbuild ExampleNetstandard.sln).
2)另外,我的理解是有两个版本msbuild,一个基于完整框架,另一个基于目标dotnet core.它是否正确?我应该经常使用dotnet version
3)是dotnet cli独立还是需要msbuild安装?例如,当您安装dotnet SDK时,这也安装了msbuild吗?如果是这样与vs2017安装的版本不同?
设置如下:
public interface IFoo
{
void Fizz();
}
[Test]
public void A()
{
var foo = new Mock<IFoo>(MockBehavior.Loose);
foo.Object.Fizz();
foo.Verify(x => x.Fizz());
// stuff here
foo.Verify(x => x.Fizz(), Times.Never()); // currently this fails
}
Run Code Online (Sandbox Code Playgroud)
基本上我想// stuff here在foo.Verify(x => x.Fizz(), Times.Never())传递中输入一些代码.
因为这可能构成moq/unit测试滥用,我的理由是我可以这样做:
[Test]
public void Justification()
{
var foo = new Mock<IFoo>(MockBehavior.Loose);
foo.Setup(x => x.Fizz());
var objectUnderTest = new ObjectUnderTest(foo.Object);
objectUnderTest.DoStuffToPushIntoState1(); // this is various lines of code and setup
foo.Verify(x => x.Fizz());
// reset the verification …Run Code Online (Sandbox Code Playgroud) 我使用NLog进行下一个配置:
<targets>
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="f" />
</rules>
Run Code Online (Sandbox Code Playgroud)
我试图获得(我检查,集合中只有一个FileTarget)的FileName属性FileTarget
NLog.LogManager.GetCurrentClassLogger().Info("test");
var logFile = (from t in NLog.LogManager.Configuration.AllTargets
where t is NLog.Targets.FileTarget
select (NLog.Targets.FileTarget)t).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
但是logFile.FileName只包含文件名的模式,确切地说它是如何在设置中指定的.
如何获取当前日志文件的运行时路径?
我的NLog目标是这样的:
<targets>
<target xsi:type="Console" name="console"
layout="${longdate}|${level}|${message}" />
<target xsi:type="File" name="ErrorLog" fileName="${basedir}/error.txt"
layout="${longdate}
Trace: ${stacktrace}
${message}" />
<target xsi:type="File" name="AccessLog" fileName="${basedir}/access.txt"
layout="${shortdate} | ${message}" />
</targets>
Run Code Online (Sandbox Code Playgroud)
但是如果用户不是他们机器上的管理员,这会导致问题,因为他们没有"程序文件"的写入权限.我怎样才能得到类似于%AppData%NLog而不是BaseDir的东西?
我目前在许多项目中使用NLog.在某些情况下,我登录到数据库.
这是我想做的事情:
CREATE TABLE [dbo].[NLogEntries](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Origin] [nvarchar](100) NOT NULL,
[LogLevel] [nvarchar](20) NOT NULL,
[Message] [nvarchar](3600) NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[OrderId] [int] NULL --Custom field!
)
Run Code Online (Sandbox Code Playgroud)
NLog.config和这个目标:
<target type="Database" name="database" connectionstring="Server=localhost;Database=NLog;Trusted_Connection=True;">
<commandText>
INSERT INTO NLogEntries ([Origin], [Message], [LogLevel],[CreatedOn],[OrderId]) VALUES (@Origin,@Message,@LogLevel,@Date, @OrderId);
</commandText>
<parameter name="@Date" layout="${date}"/>
<parameter name="@Origin" layout="${callsite}"/>
<parameter name="@LogLevel" layout="${level}"/>
<parameter name="@message" layout="${message}"/>
<parameter name="@OrderId" layout="${orderId}"/> <!-- custom field! -->
</target>
Run Code Online (Sandbox Code Playgroud)
然后记录这样的事情:
var logger = LogManager.GetCurrentClassLogger();
var orderId = 123;
logger.Debug("What is going …Run Code Online (Sandbox Code Playgroud) 如何编写NLog的布局,以毫秒为单位输出时间11:32:08:123?我用,${date:format=yyyy-MM-dd HH\:mm\:ss}但我的日志需要更多的时间精度.
似乎新的MVC(链接)中不支持动态捆绑,应该使用gulp任务来完成.MVC支持一些名为的新属性asp-append-version,但我没有找到任何关于它是如何工作的解释.我怀疑它正在计算文件内容的一些哈希值,甚至在文件更改后更新它.有没有关于它是如何工作的文件?
我也想知道它是如何检测文件更改或者它是否只是在每次MVC分析剃刀标记时重新计算哈希值.
c# ×7
nlog ×4
unit-testing ×2
asp.net-core ×1
collections ×1
csproj ×1
dotnet-cli ×1
moq ×1
msbuild ×1
nunit ×1