我最近一直在做我的第一个测试驱动开发项目,并且一直在学习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) 是否可以在数据存储中创建/存储具有最终一致性的用户帐户?
在没有大量架构复杂性的情况下管理帐户创建似乎是不可能的,以避免出现两个具有相同UID(例如电子邮件地址)的帐户的情况?
最终一致性存储的用户是否使用单独的一致数据库作为身份存储,或者是否存在我应该探索的解决方案/模式?
提前致谢,
杰米