小编Sys*_*Lol的帖子

Rhino mocks:当存在IEnumerable <T>接口时,IEnumerator.MoveNext()问题

我们的API有一个继承自IEnumerable的接口,如下所示:

public interface IFoos : IEnumerable<IFoo>
{
    // Additional foo-collection-specific methods
}
Run Code Online (Sandbox Code Playgroud)

我正在为依赖于IFoos的课程编写单元测试.它有一个迭代IFoos的方法,如下所示:

public class Bar
{

    public IFoos Foos {get; set;}
    public void FooItUp()
    {
        foreach (IFoo foo in this.Foos)
        {
            foo.JumpAround();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的单元测试中,我设法将依赖关系存根并返回一个带有Rhino Mocks的枚举器,如下所示:

[Test]
public void FooItUp_JumpsUpJumpsUpAndGetsDown()
{
    // Arrange
    var mocks = new MockRepository();
    var stubFoo1 = mocks.Stub<IFoo>();
    var stubFoo2 = mocks.Stub<IFoo>();
    var stubFoos = mockRepository.Stub<IFoos>().
    var fooEnumerator = new List<IFoo> { stubFoo1, stubFoo2 }.GetEnumerator();
    stubFoos.Stub(x => x.GetEnumerator()).Return(null).WhenCalled(x => x.ReturnValue = fooEnumerator);
    Bar bar …
Run Code Online (Sandbox Code Playgroud)

.net c# nunit unit-testing rhino-mocks

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

Word/OpenXML - 如何创建隐藏的书签?

我在OpenXML API或Word/VSTO API中没有任何运气,找到了创建或修改书签可见性的方法.即使在Word中手动添加书签,也没有要检查的框以隐藏书签.虽然在书签对话框,让你一个复选框显示隐藏的书签.那么如何在XML中表示隐藏的书签,您可以使用Open XML SDK创建它们吗?或者它们是MS不再希望我们创造的遗产?

vsto ms-word openxml

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

Win8:像OblyTile和Modern Tile Maker这样的程序如何为非Metro应用程序shorcuts分配磁贴?

我们有一个.NET但非Metro应用程序,内置在Visual Studio 2010中.我们希望在桌面上为我们的应用程序显示一个漂亮的512x512(或其他)图像.我们不需要Live Tile功能,我们只需要一个显示一个漂亮的Metro尺寸图像的快捷方式.该方案OblyTile现代瓷砖制造商可以做到这一点,尽管目前尚不清楚.他们是以编程方式创建LNK快捷方式吗?或者它们实际上是自己的快捷方式(Metro应用程序),然后启动您的旧应用程序?

如果它是前者,那么显然可以为非Win8应用程序创建Metro尺寸的桌面图标.我们如何编写这样一条捷径的创作脚本?我们不关心我们需要使用哪种语言(JScript,C++,C#,等等),只需要指向正确的方向.我们使用WiX,因此我们在安装脚本方面具有很大的灵活性.

windows-8 live-tile

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

使用"new"隐藏继承接口中的基本成员:这是一个好主意吗?

是否建议在派生接口中使用"new"关键字为具有相同名称的属性或方法提供更多派生的返回值?

假设我有一个接口IDocument:

public interface IDocument
{
    IParagraphs Paragraphs { get; }

    IRevisions Revisions { get; }

    IStyles Styles { get; }
}
Run Code Online (Sandbox Code Playgroud)

并派生出一个IRtfDocument.

public interface IRtfDocument: IDocument
{
   string Rtf { get; }
   ...
}
Run Code Online (Sandbox Code Playgroud)

我还有更多派生的IParagraphs,IRevisions和IStyles接口:IRtfParagraphs,IRtfRevisions,IRtfStyles.许多特定于RTF的需求推动了他们的创建.

当我访问RTF文档的段落时,我想避免将它们转换为IRtfParagraphs.修订和样式也一样.避免同时使用"IRtfParagraphs"和"IParagraphs"也是很好的.所以我什么喜欢做的是这样的:

public interface IRtfDocument : IDocument
{
    new IRtfParagraphs Paragraphs { get; }

    new IRtfRevisions Revisions { get; }

    new IRtfStyles Styles { get; }

    string Rtf { get; }
}
Run Code Online (Sandbox Code Playgroud)

这被认为是好习惯吗?它似乎适合这种情况,但我想由你的C#退伍军人来管理它.

更新:所以我实际上继续尝试使用我的界面中描述的"新".我的RtfDocument类最终需要一个IDocument.Styles属性一个IRtfDocument.Styles属性.虽然我可以让IDocument.Styles属性返回IRtfDocument.Styles的值,但由于我正在实现两个属性,因此感觉不太正确.

似乎编译器不考虑该IRtfStyles从IStyles派生的事实,所以它坚持我兼得.如果Liskov Substitution Principle …

c# inheritance interface

6
推荐指数
2
解决办法
5084
查看次数

Windows批处理编程:间接/嵌套变量评估

我们有一个列出一堆路径的文本文件,以及一个从该文件中读取行的批处理文件.

例如,TargetFolders.txt可能包含以下行:

%ProgramFiles%\Acme\FooBar %VersionNumber%
Run Code Online (Sandbox Code Playgroud)

当然,当我们从文本文件中读取这一行时(使用FOR命令),变量%% I接收实际行文本,使用%符号而不是替换变量值.所以,

SET VersionNumber=7.0
FOR /F "eol=; delims=" %%I IN (TargetFolders.txt) DO (
    echo Folder: %%I
)
Run Code Online (Sandbox Code Playgroud)

打印

Folder: %ProgramFiles%\Acme\FooBar %VersionNumber%
Run Code Online (Sandbox Code Playgroud)

如何使它替换实际的变量值,以便打印

Folder: C:\Program Files\Acme\FooBar 7.0
Run Code Online (Sandbox Code Playgroud)

windows command-line batch-file

5
推荐指数
2
解决办法
5260
查看次数

复制分层数据时保留父子关系

我们有一个表,表示与实体(称为项目)关联的值树,其中 ParentID 列指行父级的 id 列。id 列是一个自动递增的 IDENTITY 列和主键。根节点的 ParentID 为 0。

我们希望能够克隆给定项目的数据,并让生成的 ParentID 引用复制值的适当新 ID,以满足示例下面描述的限制。

例如,复制下表中 ProjectID 611 的数据:

    id      ProjectID    Value         ParentID
--------------------------------------------------
     1      611           Animal        0
     2      611           Frog          1
    13      611           Cow           1
    14      611           Jersey Cow    13
    25      611           Plant         0
    29      611           Tree          25
    31      611           Oak           29
Run Code Online (Sandbox Code Playgroud)

应该导致:

    id      ProjectID    Value         ParentID
--------------------------------------------------
     1      611           Animal        0
     2      611           Frog          1
    13      611           Cow           1
    14      611           Jersey Cow    13
    25      611           Plant         0 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005

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

将枚举序列化为从 Azure 函数返回的 JSON 中的字符串

有没有办法配置 Azure Functions 如何将对象序列化为 JSON 以获取返回值?我想对枚举值使用字符串而不是整数。

例如,鉴于此代码:-

public enum Sauce
{
    None,
    Hot
}

public class Dish
{
    [JsonConverter(typeof(StringEnumConverter))]
    public Sauce Sauce;
}

public static class MyFunction
{
    [FunctionName("MakeDinner")]
    public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
    {
        var dish = new Dish() { Sauce = Sauce.Hot };
        return req.CreateResponse(HttpStatusCode.OK, dish, "application/json");
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数返回:-

{
   "Sauce": 1
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它返回下面?

{
   "Sauce": "Hot"
}
Run Code Online (Sandbox Code Playgroud)

我试过返回一个字符串而不是一个对象,但结果包含\"转义符;我想要一个 JSON 结果,而不是一个 JSON 对象的转义字符串表示。

我知道在标准中ASP.NET我可以使用配置来设置序列化选项。这在函数中甚至是可能的,还是应该将所有枚举转换为字符串常量?

c# json azure json.net azure-functions

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

C++:将函数赋值给tr1 :: function对象

我们的一个类提供了tr1 :: function回调对象.但是,当我尝试为其分配成员函数时,我收到编译器错误.

以下示例未经测试,仅用于说明:

foo.h中:

class Foo()
{
public:
  Foo();
  std::tr1::function<void (int x)> F;
}
Run Code Online (Sandbox Code Playgroud)

Bar.h:

class Bar()
{
public:
   Bar();
   Foo* foo;
   void HookUpToFoo();
   void Respond(int x);
}
Run Code Online (Sandbox Code Playgroud)

Bar.cpp:

Bar()
{
    this->foo = new Foo();
    this->HookUpToFoo();
}

void Bar::HookUpToFoo()
{
  this->foo->F = &Bar::Respond; // error
}

void Bar::Respond(int x)
{
       // do stuff
}
Run Code Online (Sandbox Code Playgroud)

我们得到的编译器错误是指xrefwrap中的一行,是错误1错误C2296:'.*':非法,左操作数的类型为'int'C:\ Program Files\Microsoft Visual Studio 9.0\VC\include\xrefwrap 64

..在分配代表时我做错了什么?我想走更现代的路线并使用tr1 :: function而不是函数指针.

c++ delegates tr1

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

如何从单元测试中排除名称中带有“Test”的帮助项目?

我们有一个实用程序项目,Foo.Testing.Common以实际测试项目的帮助程序类命名,名称类似于Foo.Tests.UnitFoo.Tests.Integration。Common 项目没有测试,只有基类、实用方法等。它引用了 XUnit,所以我可以使用Xunit.Abstractions.

当我们通过 .net 命令行或 VS Test Explorer 运行所有测试时,如何避免看到如下错误?例如,在测试发现期间,VS 测试输出中会出现以下错误。

No test is available in C:\Foo.Testing.Common\bin\Debug\netcoreapp3.1\Foo.Testing.Common.dll. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
Microsoft.VisualStudio.TestPlatform.ObjectModel.TestPlatformException...
Run Code Online (Sandbox Code Playgroud)

我假设测试过程正在匹配测试以查找测试项目,然后如果其中一个项目没有测试,则会抛出错误。或者也许它正在寻找引用任何 xunit 包的项目?

我们可以重命名该项目,但是有其他方法吗?希望避免将特定测试项目列表传递到命令行,只是为了避免“未找到测试”警告。也就是说,dotnet test应该可以工作。

更新:我也尝试过仅引用xunit.abstractionsxunit.extensibility.core不是主xunit包,但 Common 项目仍然被识别为测试项目。

还尝试IsTestProject在项目属性中设置为 false。

c# xunit xunit.net visual-studio .net-core

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

为什么Regex.Match在结果中包含非捕获组?

在匹配正则表达式时,我想从结果中排除非捕获组.我错误地认为他们被默认排除在外,因为他们被称为非捕获组.

但是出于某种原因,Regex.Match表现得好像我甚至没有指定一个非捕获组.尝试在立即窗口中运行它:

System.Text.RegularExpressions.Regex.Match("b3a",@"(?:\d)\w").Value
Run Code Online (Sandbox Code Playgroud)

我期待结果

"a"
Run Code Online (Sandbox Code Playgroud)

但实际上

"3a"
Run Code Online (Sandbox Code Playgroud)

这个问题建议我查看各组,但结果中只有一个组,它也是"3a".它包含一个Capture,也就是"3a".

这里发生了什么?Regex是否有问题,或者我需要设置一个选项吗?

.net c# regex

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