我有一个方法的接口如下:
public interface IRepo
{
IA<T> Reserve<T>();
}
Run Code Online (Sandbox Code Playgroud)
我想模拟包含此方法的类,而不必为它可用于的每种类型指定安装方法.理想情况下,我只是喜欢它返回一个new mock<T>.Object.
我该如何实现这一目标?
看来我的解释还不清楚.这是一个例子 - 当我指定T(这里是字符串)时,这是可能的:
[TestMethod]
public void ExampleTest()
{
var mock = new Mock<IRepo>();
mock.Setup(pa => pa.Reserve<string>()).Returns(new Mock<IA<string>>().Object);
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是这样的:
[TestMethod]
public void ExampleTest()
{
var mock = new Mock<IRepo>();
mock.Setup(pa => pa.Reserve<T>()).Returns(new Mock<IA<T>>().Object);
// of course T doesn't exist here. But I would like to specify all types
// without having to repeat the .Setup(...) line for each of them.
}
Run Code Online (Sandbox Code Playgroud)
被测对象的某些方法可能会调用三种或四种不同类型的保留.如果我必须设置所有类型,我必须为每个测试编写大量的设置代码.但是在单个测试中,我并不关心所有这些,我只需要非空的模拟对象,除了我实际测试的那个(我很乐意写一个更复杂的设置).
使用typescript,我可以轻松地将类绑定到自己:
bootstrap(MyAppComponent, [MyClass]);
Run Code Online (Sandbox Code Playgroud)
但是,我想将我的类绑定到一个接口,如下所示:
boostrap(MyAppComponent, [???]);
Run Code Online (Sandbox Code Playgroud)
这样我可以按如下方式注入:
class MyAppComponent {
constructor(my_class : IMyClass){
}
};
Run Code Online (Sandbox Code Playgroud)
这在Angular2中是否可行?如果是,我该如何指定绑定?
上下文
用于开发的GitHub Enterprise安装.每个开发人员都有自己的公共回购,组织拥有authorative repo.Pull请求用于代码审查,我们松散地遵循nvie的git flow分支模型.
用于问题跟踪和部署的TFS安装(发布分支).我们将发布分支镜像到TFS仓库.
工作项目
现在困难的部分是:我们如何将git提交(最初可能在开发人员的公共分支上完成)与TF工作项相关联?
我做了什么
我看了下面的项目寻求帮助:
我已经阅读了在两个Git-TF项目中将提交与工作项相关联的参考文献,但我不确定使用什么工具,以及如何准确地解决它.
如果我必须在发布分支上运行脚本提交从提交消息中提取工作项引用并将它们与发送到TFS的变更集相关联,我会没事的.但是,优选允许元数据(而不是提交消息)中的关联的解决方案.
我有什么选择将TFS中的工作项与git提交相关联?
我使用Visual Studio 2012作为C#和C++/CLI .dll的解决方案,C++/CLI dll引用本机.dll,例如boost.C++代码编译为x64.
当我打开VS时,我可以清理并构建我的项目.
使用测试资源管理器,我可以运行我的测试.
一旦我使用测试资源管理器运行测试一次,我就无法重建项目.似乎VS2012 Test Explorer对我的C++/CLI-dll保持锁定,并且在那里我收到以下错误:
LNK1104: cannot open file 'C:\Dev\LockExample\bin\Debug\cli.dll'
Run Code Online (Sandbox Code Playgroud)
因此,每当我使用Test Explorer运行测试时,我需要重新启动VS2012才能继续开发.显然,这不是一个可持续发展的过程.
测试和重建工作没有问题C#-only dll - 只要我能告诉问题只发生在使用本机x64代码的DLL上.
经过一些测试,我发现这里的反派是vstest.executionengine.exe.使用句柄(来自SysInternals),我看到vstest.executionengine.exe保存了.dll和cli-dll的.pdb的锁.对于托管专用dll,它没有任何锁定.
在测试运行完成后,如何让Visual Studio Test Explorer释放C++/Cli dll上的锁?
在Visual Studio csproj中,要编译的文件如下所示:
<ItemGroup>
<Compile Include="C\Something.cs">
<Compile Include="B\SomethingElse.cs">
<Compile Include="A\YetSomethingElse.cs">
<\ItemGroup>
Run Code Online (Sandbox Code Playgroud)
在我看来,订单是随机的(至少我看不到订购原则).
它发生了几次,在修复合并冲突期间,我错误地添加了两次文件(因为有很多文件,并且合并冲突行的文件已经在列表中的另一个位置).如果有一种方法可以Compile Include按字母顺序对d文件进行排序,这将很容易避免.
这是否可能(或者我自己必须编写脚本)?是否有任何副作用我必须注意?
NuGet 1.5状态的发行说明
NuGet now supports connecting to private repositories that require basic
or NTLM authentication.
Run Code Online (Sandbox Code Playgroud)
但是,其中包含的链接只会导致托管您自己的nuget供稿页面,而不再提及如何设置身份验证.
我想建立一个可通过互联网https访问的NuGet服务器,但只允许能够成功通过身份验证的人查看或下载服务器上的软件包.
我确实创建了一个没有auth的应用程序,如文档中的Creating Remote Feeds部分所述,它在Intranet上运行良好.如何在此repo上启用身份验证?
另外一个要求是解决方案不应该花费数百美元(前两个答案促进了可能解决问题但成本很高的产品).
上下文:具有2个程序集,Cs和Cpp的Visual Studio解决方案.
我有一些来自nuget.org的纯C#项目的依赖项.我使用作者提供的原始包.将它们添加到Cs项目工作正常,但不是Cpp.
如何将C#包添加到C++项目中?
因为它是C++/Cli,所以我可以很容易地使用.net对象,并且我在C#库中使用例如来自C#库的东西.但不知何故nuget只允许我选择C#项目来添加C#依赖,而不是C++/clr.
在这个答案中,我向我解释了使用selectItem来获取select事件.
但此时,我绑定到文本框的模型仍然是用户键入的原始文本,而不是选择项.
我用
(selectItem)="search(model)"
Run Code Online (Sandbox Code Playgroud)
得到这个事件,并在TS
search(model) {
this._service.search(model).subscribe(
results => this.results = results,
error => this.errorMessage = <any>error);
Run Code Online (Sandbox Code Playgroud)
}
但如上所述,它使用用户输入的文本调用我的后端,而不是typeahead所选项目的全文.
我的后端记录
2017/03/24 20:44:14 /api/typeahead/ok
2017/03/24 20:44:14 /api/search/ok
Run Code Online (Sandbox Code Playgroud)
其中第二个应该是/ api/search/$ actualSelectedItem.
Visual Studio在命名空间中缩进代码.全局禁用缩进时可以避免这种情况,这不是我想要的.在其他情况下,压痕是好的,我只是不喜欢的事实,所有的代码是一个级别 - 这使得它看起来丑陋给我.
namespace X
{
public class A
{}
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样:
namespace X
{
public class A
{
}
}
Run Code Online (Sandbox Code Playgroud)
在C++中,有一个很好的解决方法,因为解释在这里:
namespace X
{; // the ; after opening brace makes visual studio not indent the class below.
class A
{};
}
Run Code Online (Sandbox Code Playgroud)
但是在C#中,命名空间不能直接包含字段,因此这不起作用.
如何在不全局禁用缩进的情况下让Visual Studio停止缩进命名空间?
更新 Visual Studio 2013行为C++已更改
Tools->Options->C/C++->Formatting->Indentation: [ ] Indent namespace contents
Run Code Online (Sandbox Code Playgroud)
启用我首选的格式,而{; 技巧不再起作用了.但是我找不到C#的变化.
我正在尝试使用C#程序集和C++/Cli程序集调试项目.
C#中定义的接口由C++/Cli类继承,后者又调用本机C++类.在C++和C#程序集以及启动.exe中都启用了混合模式调试.
现在,当我尝试调试C++部分时,它变得棘手; 如果我只是在C++部分中设置断点,它们就不会被击中(尽管事实上我知道它们被击中了,因为写入了日志(等)并抛出异常,实际上它会正确地抛出它).
当我在调用混合模式程序集之前在C#的最新调用中设置断点时,我可以进入C++/Cli代码,甚至进入本机部分.但是,Call堆栈显示为
MyMixedMode.dll!<Unknown function> Line ...
Run Code Online (Sandbox Code Playgroud)
并且我无法检查任何本地人(本机代码中的本地视图只是空的).
我有什么想法可能做错了吗?