小编Jef*_*eff的帖子

如何在没有选择VB.NET项目中的"显示所有文件"的情况下在解决方案资源管理器中显示References文件夹?

当我将许多C#示例项目与我的VB.NET项目进行比较时,我看到References文件夹显示在解决方案资源管理器中,而不必选择"显示所有文件".是否有可能将这个用于VB.NET项目?我发现显示这个文件夹而不必查看所有其他隐藏文件会非常有帮助.

我正在使用VS2010 Professional.

这增加了我之前应该首先学习C#的原因列表...提前感谢任何可以告诉我如何实现这一目标的人,或者最终粉碎我的梦想.

projects-and-solutions reference solution options visual-studio

30
推荐指数
1
解决办法
3万
查看次数

如何在没有HttpClientFactory的情况下向HttpClient添加多个HttpMessageHandler

我有一个控制台应用程序,它使用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的方法 …

.net c# dotnet-httpclient

13
推荐指数
3
解决办法
1万
查看次数

如何使用Autofixture(v3)与ICustomization,ISpecimenBuilder来处理构造函数参数?

我正在尝试克服一个类具有字符串构造函数参数的情况,该参数不能被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)

unit-testing autofixture

11
推荐指数
2
解决办法
4232
查看次数

使用Moq Verify()方法调用计数时,失败测试的错误消息包含使用Moq的实际方法调用计数

考虑以下内容,我在测试注入依赖项的方法被调用特定次数:

[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)

unit-testing moq mocking moq-3

10
推荐指数
1
解决办法
1万
查看次数

为什么Autofixture w/AutoMoqCustomization在类密封时停止抱怨缺乏无参数构造函数?

当我直接使用Moq来模拟IBuilderFactoryBuilderService在单元测试中实例化自己时,我可以通过测试来验证Create()方法是否只IBuilderFactory被调用一次.

但是,当我使用AutofixtureAutoMoqCustomization,冻结模拟IBuilderFactory和实例化BuilderServicefixture.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

8
推荐指数
1
解决办法
1308
查看次数

为什么不使用AutoFixture Freeze,SemanticComparison Likeness和CreateProxy进行简单的测试?

我试图了解如何使用使用简单类的两个实例的CreateProxy()功能Likeness<T>().

public class Band
{
    public string Strings { get; set; }
    public string Brass { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

通过下面的测试中,我使用FixtureCreate<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)

autofixture semantic-comparison

7
推荐指数
1
解决办法
1099
查看次数

使用Ninject并绑定默认实现,同时避免可怕的Service Locator反模式

是否可能和/或一个好主意使用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

7
推荐指数
1
解决办法
3403
查看次数

如何将自定义ISpecimenBuilders与OmitOnRecursionBehavior一起使用?

如何将自定义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)

autofixture

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

VS2015 C#interactive:错误CS7069:引用类型'Object'声称它是在'System.Runtime'中定义的,但是找不到它

我刚刚更新到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

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

如何迭代Ninject StandardKernel配置的绑定到调试?

在我的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]等...

有没有好的和/或常见的方法来做到这一点?

ninject ioc-container autowired

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