当我将许多C#示例项目与我的VB.NET项目进行比较时,我看到References文件夹显示在解决方案资源管理器中,而不必选择"显示所有文件".是否有可能将这个用于VB.NET项目?我发现显示这个文件夹而不必查看所有其他隐藏文件会非常有帮助.
我正在使用VS2010 Professional.
这增加了我之前应该首先学习C#的原因列表...提前感谢任何可以告诉我如何实现这一目标的人,或者最终粉碎我的梦想.
projects-and-solutions reference solution options visual-studio
我有一个控制台应用程序,它使用HttpClient来发出Web请求.
var client = new HttpClient();
Run Code Online (Sandbox Code Playgroud)
我正在尝试向它添加多个HttpMessageHandler(真的是DelegatingHandler的自定义实现),但HttpClient的构造函数只需要一个HttpMessageHandler.
class LoggingHandler : DelegatingHandler { //... }
class ResponseContentProcessingHandler : DelegatingHandler { //... }
Run Code Online (Sandbox Code Playgroud)
还行吧...
var client = new HttpClient(new LoggingHandler()); // OK
Run Code Online (Sandbox Code Playgroud)
但这不编译:
var client = new HttpClient(
new LoggingHandler(),
new ResponseContentProcessingHandler()); // Sadness
Run Code Online (Sandbox Code Playgroud)
因为我的目标是.NET 4.0,所以我不能使用HttpClientFactory,这就解释了这个问题的解决方法:
HttpClient client = HttpClientFactory.Create(
new LoggingHandler(),
new ResponseContentProcessingHandler());
Run Code Online (Sandbox Code Playgroud)
因为我只是在一个控制台应用程序中,而不是在ASP.NET应用程序中,所以我不能这样做:
GlobalConfiguration.Configuration
.MessageHandlers
.Add(new LoggingHandler()
.Add(new ResponseContentProcessingHandler());
Run Code Online (Sandbox Code Playgroud)
我已经查看了HttpClientFactory的源代码,并且似乎没有任何东西不能在.NET 4.0中编译,但是没有滚动我自己的工厂("灵感来自微软的源代码"),是否有手动将许多HTTP消息处理程序添加到HttpClient的方法 …
我正在尝试克服一个类具有字符串构造函数参数的情况,该参数不能被Autofixture生成的任何旧字符串(Guid-y外观值)所满足.
在您想要简单地回复Mark Seemann的关于基于会议的自定义的Ploeh博客文章的链接之前,请允许我说我一直在引用它和他的其他博客条目进行此测试,我无法访问通过.
当我在调试中单步执行时,我可以看到构造函数参数在某些时候传入了有效值,但测试仍然失败并带有Guid-y Color值.我认为这与"自动混合"填充"颜色"参数值和 "颜色"属性这一事实有关.是不是我编写了一个解决构造函数参数的ISpecimenBuilder,但我正在测试公共属性值(两个不同的东西)?
我知道所有这些对于该示例来说都是过度的,但我想到了一个更复杂的场景,其中使用该Build<T>().With()方法将不会是DRY.
失败测试
[Fact]
public void Leaf_Color_Is_Brown()
{
// arrange
var fixture = new Fixture().Customize(new LeafColorCustomization());
// act
var leaf = fixture.Create<Leaf>();
// using .Build<>.With(), test passes
//var leaf = fixture.Build<Leaf>().With(l => l.Color, "brown").CreateAnonymous();
// assert
Assert.True(leaf.Color == "brown");
}
Run Code Online (Sandbox Code Playgroud)
SUT
public class Leaf
{
public Leaf(string color)
{
if (color != "brown")
throw new ArgumentException(@"NO LEAF FOR YOU!");
this.Color = color;
}
public string Color { get; set; } …Run Code Online (Sandbox Code Playgroud) 考虑以下内容,我在测试注入依赖项的方法被调用特定次数:
[Fact]
public void WhenBossTalksEmployeeBlinksTwice()
{
// arrange
var employee = new Mock<IEmployee>();
employee.Setup(e => e.Blink());
var boss = new Boss(employee.Object);
// act
boss.Talk();
// assert
employee.Verify(e => e.Blink(), Times.Exactly(2)); // Passes as expected
employee.Verify(e => e.Blink(), Times.Exactly(1)); // Fails as expected
}
Run Code Online (Sandbox Code Playgroud)
当我强制执行失败测试时,输出为:
Moq.MockException:未在模拟上执行1次调用:e => e.Blink()
更好的是:
Moq.MockException:意外地执行了2次调用,而不是1次:e => e.Blink()
以下是测试涉及的项目:
public interface IEmployee { void Blink(); }
public class Boss {
private readonly IEmployee _employee;
public Boss(IEmployee employee) { _employee = employee; }
public void Talk() {
_employee.Blink(); …Run Code Online (Sandbox Code Playgroud) 当我直接使用Moq来模拟IBuilderFactory并BuilderService在单元测试中实例化自己时,我可以通过测试来验证Create()方法是否只IBuilderFactory被调用一次.
但是,当我使用Autofixture与AutoMoqCustomization,冻结模拟IBuilderFactory和实例化BuilderService时fixture.Create<BuilderService>,我得到以下异常:
System.ArgumentException:无法实例化类的代理:OddBehaviorTests.CubeBuilder.找不到无参数构造函数.参数名称:constructorArguments
如果我进行CubeBuilder密封(通过使用SealedCubeBuilder被调用的密封类替换它来表示IBuilderFactoryForSealedBuilder.Create(),测试使用AutoFixture和AutoMoqCustomization进行传递,没有异常抛出.
我错过了什么吗?由于我直接使用Moq进行测试,我相信这与Autofixture和/或AutoMoqCustomization有关.这是理想的行为吗?如果是这样,为什么?
要重现,我正在使用:
using Moq;
using Ploeh.AutoFixture;
using Ploeh.AutoFixture.AutoMoq;
using Xunit;
Run Code Online (Sandbox Code Playgroud)
以下是说明行为的四个测试:
public class BuilderServiceTests {
[Fact]
public void CubeBuilderFactoryCreateMethodShouldBeCalled_UsingMoq() {
var factory = new Mock<IBuilderFactory>();
var sut = new BuilderService(factory.Object);
sut.Create();
factory.Verify(f => f.Create(), Times.Once());
}
[Fact]
public void CubeBuilderFactoryCreateMethodShouldBeCalled_UsingAutoFixture() {
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var factory = …Run Code Online (Sandbox Code Playgroud) dependency-injection castle-dynamicproxy moq autofixture automocking
我试图了解如何使用使用简单类的两个实例的CreateProxy()功能Likeness<T>().
public class Band
{
public string Strings { get; set; }
public string Brass { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
通过下面的测试中,我使用Fixture到Create<T>一个Band实例与两个字符串属性的值.
[Fact]
public void Equality_Behaves_As_Expected()
{
// arrange
var fixture = new Fixture();
fixture.Customize(new AutoMoqCustomization());
var original = fixture.Create<Band>();
// Brass something like --> "Brass65756b89-d9f3-42f8-88fc-ab6de5ae65cd"
// Strings something like --> "Strings7439fa1b-014d-4544-8428-baea66858940"
// act
var dupe = new Band {Brass = original.Brass,
Strings = original.Strings};
// Brass same as original's like …Run Code Online (Sandbox Code Playgroud)
是否可能和/或一个好主意使用Ninject(或任何其他IoC容器)为不存在适当实现的情况创建默认绑定,并使用此默认绑定而不是必须处理ActivationException当存在多个绑定,或者特定请求没有绑定时?
我一直在使用Ninject的工厂和公约扩展项目,但我想知道他们是否正在掩盖我在更基础的层面上犯的错误,所以我创建了一个测试来说明我想要做的事情,因为我尽我所能:
鉴于以下内容:
public interface IWidget { }
public class DefaultWidget : IWidget { }
public class BlueWidget : IWidget { }
Run Code Online (Sandbox Code Playgroud)
以下使用FluentAssertions进行xUnit测试:
[Fact]
public void Unknown_Type_Names_Resolve_To_A_Default_Type()
{
StandardKernel kernel = new StandardKernel();
// intention: resolve a `DefaultWidget` implementation whenever the
// 'name' parameter does not match the name of any other bound implementation
kernel.Bind<IWidget>().To<DefaultWidget>();
kernel.Bind<IWidget>().To<BlueWidget>().Named(typeof(BlueWidget).Name);
kernel.Get<IWidget>("RedWidget").Should().BeOfType<DefaultWidget>();
// ACTIVATION EXCEPTION (**NO matching bindings available** for `IWidget`)
} …Run Code Online (Sandbox Code Playgroud) dependency-injection anti-patterns ninject ioc-container service-locator
如何将自定义ISpecimenBuilder实例以及OmitOnRecursionBehavior我想要全局应用于所有夹具创建的对象?
我正在使用带有恶臭循环引用的EF Code First模型,出于此问题的目的,无法消除:
public class Parent {
public string Name { get; set; }
public int Age { get; set; }
public virtual Child Child { get; set; }
}
public class Child {
public string Name { get; set; }
public int Age { get; set; }
public virtual Parent Parent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我熟悉侧步循环引用的技术,就像在这个通过测试中一样:
[Theory, AutoData]
public void CanCreatePatientGraphWithAutoFixtureManually(Fixture fixture)
{
//fixture.Customizations.Add(new ParentSpecimenBuilder());
//fixture.Customizations.Add(new ChildSpecimenBuilder());
fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList()
.ForEach(b => fixture.Behaviors.Remove(b));
fixture.Behaviors.Add(new OmitOnRecursionBehavior()); …Run Code Online (Sandbox Code Playgroud) 我刚刚更新到VS2015 Update 2,并开始使用C#交互式窗口.我想在我的一个.NET 4.0目标库项目中的静态类中使用静态方法,所以我在解决方案资源管理器中右键单击该项目,然后选中Initialize Interactive with Project.交互式窗口中的输出如下所示(为简洁起见,我用'..'替换了一些完整路径):
#reset
Resetting execution engine.
Loading context from 'CSharpInteractive.rsp'.
#r "..\src\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll"
#r "..\src\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll"
#r "..\src\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll"
#r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll"
#r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll"
#r "..\src\packages\Microsoft.Bcl.1.1.8\lib\net40\System.IO.dll"
#r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Net.dll"
#r "..\src\packages\Microsoft.Bcl.1.1.8\lib\net40\System.Runtime.dll"
#r "..\src\packages\Microsoft.Bcl.1.1.8\lib\net40\System.Threading.Tasks.dll"
#r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll"
#r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.Linq.dll"
#r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.DataSetExtensions.dll"
#r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll"
#r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll"
#r "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.dll" …Run Code Online (Sandbox Code Playgroud) .net c# read-eval-print-loop visual-studio-2015 c#-interactive
在我的Ninject绑定模块中,
public class CarModule : NinjectModule
{
public override void Load()
{
Kernel.Bind(scanner => scanner.FromThisAssembly().SelectAllClasses()
.InheritedFrom<ICar>().BindAllInterfaces());
foreach (var binding in kernel.GetBindings(typeof(ICar)))
{
Trace.WriteLine(string.Format("[{0}] Service bound to [{1}]",
binding.Service.Name,
binding.Target.GetType().Name));
}
// Output looks like:
//[ICar] Service bound to [BindingTarget]
//[ICar] Service bound to [BindingTarget]
//[ICar] Service bound to [BindingTarget]
}
}
Run Code Online (Sandbox Code Playgroud)
我需要进行健全性检查以查看我已成功绑定到我的服务的类型.我无法访问绑定类型的类型名称.相反的[BindingTarget],我倒要看看[Mercedes],[Ferrari]等...
有没有好的和/或常见的方法来做到这一点?
autofixture ×4
.net ×2
c# ×2
moq ×2
ninject ×2
unit-testing ×2
automocking ×1
autowired ×1
mocking ×1
moq-3 ×1
options ×1
reference ×1
solution ×1