小编JBo*_*wen的帖子

如何使用MOQ对象测试Ninject ConstructorArguments?

我最近一直在做我的第一个测试驱动开发项目,并且一直在学习Ninject和MOQ.这是我对这一切的第一次尝试.我发现TDD方法一直在发人深省,Ninject和MOQ一直很棒.我正在开发的项目并不特别适合Ninject,因为它是一个高度可配置的C#程序,旨在测试Web服务接口的使用.

我已将其分解为模块并在整个商店中都有接口,但我仍然发现在从Ninject内核获取服务的实现时我必须使用大量的构造函数参数.例如;

在我的Ninject模块中;

Bind<IDirEnum>().To<DirEnum>()
Run Code Online (Sandbox Code Playgroud)

我的DirEnum课程;

public class DirEnum : IDirEnum
{
    public DirEnum(string filePath, string fileFilter, 
        bool includeSubDirs)
    {
        ....
Run Code Online (Sandbox Code Playgroud)

在我的Configurator类中(这是主入口点)将所有服务挂钩在一起;

class Configurator
{

    public ConfigureServices(string[] args)
    {
        ArgParser argParser = new ArgParser(args);
        IDirEnum dirEnum = kernel.Get<IDirEnum>(
            new ConstructorArgument("filePath", argParser.filePath),
            new ConstructorArgument("fileFilter", argParser.fileFilter),
            new ConstructorArgument("includeSubDirs", argParser.subDirs)
        );
Run Code Online (Sandbox Code Playgroud)

filePath,fileFilter和includeSubDirs是程序的命令行选项.到现在为止还挺好.然而,作为一个尽职尽责的人,我有一个覆盖这段代码的测试.我想使用MOQ对象.我为我的测试创建了一个Ninject模块;

public class TestNinjectModule : NinjectModule
{
    internal IDirEnum mockDirEnum {set;get};
    Bind<IDirEnum>().ToConstant(mockDirEnum);
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我像这样使用它;

[TestMethod]
public void Test()
{
    // Arrange
    TestNinjectModule testmodule = new TestNinjectModule();
    Mock<IDirEnum> mockDirEnum = new Mock<IDirEnum>();
    testModule.mockDirEnum = …
Run Code Online (Sandbox Code Playgroud)

tdd dependency-injection ninject moq

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

是否可以在数据存储中管理具有最终一致性的用户/身份?

是否可以在数据存储中创建/存储具有最终一致性的用户帐户?

在没有大量架构复杂性的情况下管理帐户创建似乎是不可能的,以避免出现两个具有相同UID(例如电子邮件地址)的帐户的情况?

最终一致性存储的用户是否使用单独的一致数据库作为身份存储,或者是否存在我应该探索的解决方案/模式?

提前致谢,

杰米

identity scalability eventual-consistency nosql

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