小编ale*_*rul的帖子

单元测试,模拟对象和ioc的最佳实践

好的,所以我最近一直试图进入IoC.但是,我一直遇到一个障碍 - 这就是我喜欢使用模拟对象的事实.

它们快速而轻松地进行设置.

但是,如果我在代码中使用IoC,那么它会强制我创建对象的测试实现(和配置),而不是使用模拟对象(即使用moq).

最终结果是我最终得到了大量的配置文件进行测试.

此外,在测试中有许多场景,我需要在测试到测试的基础上从我的类中获得不同的行为.使用moq对象非常容易.你会如何做与IoC类似的事情?

任何帮助将非常感激.

谢谢,
迈克

tdd mocking inversion-of-control

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

UTF8文件字符的开头是打破序列化器和读者

好的,我正在尝试使用UTF8文本文件.我一直在努力争取作家为UTF8投入的BOF字符,它几乎可以用来读取文件,包括序列化器和其他文本阅读器.

我得到了前六个字节的数据:

0xEF
0xBB
0xBF
0xEF
0xBB
0xBF
Run Code Online (Sandbox Code Playgroud)

(现在我正在看它,我意识到那里有两个字符.那是UTF8 BOF标记吗?我对它进行双重编码)?

注意序列化器编码为UTF8,然后内存流得到一个字符串为UTF8,然后我用UTF8将字符串写入文件...似乎有很多冗余.思考?

//I'm storing this xml result to a database field. (this one includes the BOF chars)
using (MemoryStream ms = new MemoryStream())
{
    Utility.SerializeXml(ms, root);
    xml = Encoding.UTF8.GetString(ms.ToArray());

}


//later on, I would take that xml and then write it out to a file like this: 
File.WriteAllText(path, xml, Encoding.UTF8);



public static void SerializeXml(Stream output, object data)
{
    XmlSerializer xs = new XmlSerializer(data.GetType());
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true; …
Run Code Online (Sandbox Code Playgroud)

c# unicode utf-8 xml-serialization

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

如何使用自定义msbuild任务读取注册表值?

我正在创建一个MSBuild任务,它将读取特定注册表项的注册表.如果我在控制台应用程序中编写相同的代码行(见下文),它将返回预期的结果,但是当它在MSBuild任务中时,它不返回任何内容.

Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Run Code Online (Sandbox Code Playgroud)

Nothing如果键/值对不存在,我希望上面的代码返回,如果它存在,则返回值.我Nothing在MSBuild任务执行时得到了.是否有一些属性需要应用于MSBuild任务的Execute函数来告诉它需要读取注册表?

编辑:

以下是从MSBuild任务执行的操作:

Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Run Code Online (Sandbox Code Playgroud)

我相信这是由我的Vista x64机器上的注册表重定向器在32位运行MSBuild引起的.是否有任何方法可以告诉自定义MSBuild任务(用VB .Net编写),HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\只有在没有任何内容的情况下查看然后查看HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\

谢谢,

斯科特蓝

registry msbuild msbuild-task

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

用另一个容器替换Spring.Net IoC(例如Ninject)

我很想知道是否可以用Ninject 替换 Spring.Net的内置IoC容器.我们在我的团队中使用Ninject在我们的其他项目中使用IoC,所以如果可能的话我想继续使用该容器.

这可能吗?有没有人写过Ninject-Spring.Net适配器?

编辑

我喜欢Spring.Net包的许多部分(数据访问,事务等),但我不喜欢依赖注入容器.我想用Ninject取代它

谢谢

dependency-injection spring.net ninject inversion-of-control

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

如何在Windows XP中写入I/O端口?(Delphi7的)

我试图写入端口0x60和0x64,没有运气.

德尔福代码:

procedure PortOut(IOport: WORD; Value: BYTE); assembler; register;
asm
  XCHG DX,AX
  OUT DX,AL
end;
Run Code Online (Sandbox Code Playgroud)

在调用PortOut时,我得到EPrivilege Privileged指令异常,因为IN并且OUT可能只作为Ring0执行.

我想知道如何获得我的应用程序的Ring0权限或如何使用一些现有的外部库写入端口0x60和0x64.

windows delphi io delphi-7

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

DI-Container:如何将配置传递给对象

有时我的课程需要获取一些构建信息。我不是在谈论对其他对象(将被注入)的引用,而是在谈论(例如)包含唯一信息的字符串:

// Scoped as singleton!
class Repository
{
    public Repository( InjectedObject injectedObject, string path ) { ... }
}
Run Code Online (Sandbox Code Playgroud)

你如何注入这个字符串?一种可能性是编写一个Init()方法并避免注入字符串:

class Repository
{
    public Repository( InjectedObject injectedObject ) { ... }
    public void Init( string path ) { ... }
}
Run Code Online (Sandbox Code Playgroud)

另一种可能性是将信息包装到一个可以注入的对象中:

class InjectedRepositoryPath
{
    public InjectedRepositoryPath( string path ) { ... }
    public string Path { get; private set; }
}

class Repository
{
    public Repository( InjectedObject injectedObject, InjectedRepositoryPath path ) { ... }
}
Run Code Online (Sandbox Code Playgroud)

这样我就必须InjectedRepositoryPath …

dependency-injection inversion-of-control

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

使用IoC时如何管理对象处理?

我的情况是Ninject 2.

// normal explicit dispose
using (var dc = new EFContext) 
{
}
Run Code Online (Sandbox Code Playgroud)

但有时我需要保持上下文更长时间或在函数调用之间.所以我想通过IoC范围来控制这种行为.

// if i use this way. how do i make sure object is disposed.
var dc = ninject.Get<IContext>() 

// i cannot use this since the scope can change to singleton. right ??
using (var dc = ninject.Get<IContext>()) 
{
}
Run Code Online (Sandbox Code Playgroud)

示例范围

Container.Bind<IContext>().To<EFContext>().InSingletonScope();
// OR
Container.Bind<IContext>().To<EFContext>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)

dependency-injection ninject ioc-container inversion-of-control

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

Watin测试在CC.Net失败

我正在Windows Server 2003下的CC.Net上运行带有xUnit的Watin测试.

我有很多测试,在使用TestDriven.Net的开发盒和使用xUnit gui app的服务器上运行良好.但是,当CC.Net运行测试(作为MSBuild任务的一部分)时,该功能

ie.ContainsText("some text to find");
Run Code Online (Sandbox Code Playgroud)

永远不会返回预期值.IE对象上的其他函数和属性似乎工作正常:Button(...).Click(),TextBox(...).Value等.

我知道服务帐户需要"允许服务与桌面交互".

我在本地系统和本地管理员下尝试过运行CC服务.管理员帐户只是挂起并且似乎永远不会完成运行测试(尽管它确实创建了一个iexplorer.exe进程的实例.

这是服务器上的权限问题,还是我从配置中遗漏了一些东西?

watin unit-testing xunit.net

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

指定ASP.NET Http Handler的确切路径

我使用Http Handler动态生成XML/Google站点地图,因此我不需要手动维护XML文件.

我已将我的Http Handler映射到我的web.config中的"sitemap.xml",如下所示:

<httpHandlers>
  <add verb="*" path="sitemap.xml" type="My.Name.Space, MyAssembly" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)

它工作得很好.现在,www.mywebsite.com/sitemap.xml将我的Http Handler设置为动作并完全按照我的意愿行事.但是,这个URL会做同样的事情:www.mywebsite.com/some/folder/sitemap.xml我真的不想要那个,即我只是想将我的处理程序映射到我的应用程序的根目录.

我已经尝试将我的web.config中处理程序的"路径"更改为"/sitemap.xml"和"〜/ sitemap.xml",但都不起作用.

我在这里错过了什么吗?

asp.net web-config httphandler

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

Windows XP是否包含GdiPlus.dll?

我有一个关于部署应用程序的问题,我的应用程序需要gdiplus.dll来加载图像.Windows XP是否包含GdiPlus.dll作为默认值?非常感谢!

deployment gdi+ windows-xp

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