小编Vac*_*ano的帖子

单元测试 - 让单元测试调用其他单元测试是不好的形式

我有一个单元测试TestMakeAValidCall().它测试我的手机应用程序拨打有效电话.

我即将编写另一个TestShowCallMessage()需要为测试进行有效调用的测试.只是打电话给TestMakeAValidCall()那个测试是不好的形式?

作为参考,这是我的TestMakeAValidCall()测试.

    [TestMethod]
    public void TestMakeAValidCall()
    {
       //Arrange
        phone.InCall = false;
        phone.CurrentNumber = "";
        // Stub the call to the database
        data.Expect(x => x.GetWhiteListData()).
            Return(FillTestObjects.GetSingleEntryWhiteList());
        // Get some bogus data
        string phoneNumber = FillTestObjects.GetSingleEntryWhiteList().
            First().PhoneNumber;
        // Stub th call to MakeCall() so that it looks as if a call was made.
        phone.Expect(x => x.MakeCall(phoneNumber)).
            WhenCalled(invocation =>
                       {
                           phone.CurrentNumber = phoneNumber;
                           phone.InCall = true;
                       });

       //Act
        // Select the phone number
        deviceControlForm.SelectedNumber …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing visual-studio

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

如何指示AutoFixture不打扰填写某些属性?

我有一组嵌套得相当深的数据访问类.

要构建其中5个列表,需要AutoFixture超过2分钟.每单元测试2分钟就可以了.

如果我手工编写它们,我只会编写我需要的代码,因此它会更快地初始化.有没有办法告诉AutoFixture只做一些属性,所以它不能花时间在我不需要的结构区域?

例如:

public class OfficeBuilding
{
   public List<Office> Offices {get; set;}
}

public class Office
{
   public List<PhoneBook> YellowPages {get; set;}
   public List<PhoneBook> WhitePages {get; set;}
}

public class PhoneBook
{
    public List<Person> AllContacts {get; set;}
    public List<Person> LocalContacts {get; set;}
}

public class Person
{
   public int ID { get; set; }
   public string FirstName { get; set;}
   public string LastName { get; set;}
   public DateTime DateOfBirth { get; set; }
   public char Gender { get; set; …
Run Code Online (Sandbox Code Playgroud)

.net c# autofixture

24
推荐指数
2
解决办法
6945
查看次数

在foreach循环中删除XElements

所以,我有一个要删除的bug

foreach (XElement x in items.Elements("x")) 
{
    XElement result = webservice.method(x);

    if (/*condition based on values in result*/) 
    {
        x.Remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是调用x.Remove()会改变foreach,如果有两个元素("x"),并且第一个被删除,则循环不会到达第二个x元素.

那我该如何循环呢?或者是否应该以另一种方式重写?

.net foreach xelement c#-3.0

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

"从数据库更新模型"看不到类型更改

我有几个列,我从Int更改为BigInt.

我打开了我的EF模型并做了一个'从数据库更新模型',并期望看到这些列现在是Int64s.但他们仍然是Int32s.

(为了确定,我跑了好几次.)

我仔细检查了我的数据库,列绝对是BigInts.

那么......"从数据库更新模型"不适用于更改数据类型吗?是否需要手动应用?

entity-framework entity-framework-4

23
推荐指数
3
解决办法
2万
查看次数

ClickOnce应用程序跳过要求更新(如果选择了skip,则跳过失败)

我更新了我的ClickOnce应用程序,然后当用户运行时,系统会询问他们是否要安装新版本.

我在一个高度控制的环境中工作.当更新可用时,必须安装(旧版本无法确保向后兼容数据库).

另一种选择是如果按下跳过则运行失败(也可以正常工作).

我需要一些方法来阻止他们运行旧版本的应用程序.

c# clickonce visual-studio-2008-sp1 .net-3.5 visual-studio-2008

22
推荐指数
2
解决办法
2万
查看次数

IGrouping的实现类是什么?

我正在尝试创建一个WCF数据服务ServiceOperation,它在服务器端进行分组,然后将数据发送到客户端.

当我尝试调用它(甚至连接到服务)时,我收到一个错误.它说它无法构建一个接口.

我使用的唯一界面是IGrouping.

什么是这个界面的实际类?


更新:

我在调试示例应用程序时检查了类型,它告诉我它是:

System.Linq.Lookup<TKey,TElement>.Grouping
Run Code Online (Sandbox Code Playgroud)

但它的装配是什么?

.net c# wcf-data-services

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

ANSI_NULLS和QUOTED_IDENTIFIER杀死了一些东西.它们适用于什么?

注意:我检查了理解QUOTED_IDENTIFIER并且它没有回答我的问题.

我让我的DBA运行我在Prod服务器上制作的索引(他们查看并批准了它).

它就像我想要的那样加速了我的查询.但是,我开始遇到这样的错误:

UPDATE失败,因为以下SET选项具有不正确的设置:ANSI_NULL,QUOTED_IDENTIFIER,CONCAT_NULL_YIELDS_NUL

作为开发人员,我通常会忽略这些设置.它从来都不重要.(9年以上).好吧,今天很重要.

我去看了一个失败的sprocs,它在创建sproc之前有这个:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Run Code Online (Sandbox Code Playgroud)

任何人都可以从应用程序开发人员的角度告诉我这些set语句的作用是什么? (在我的索引创建语句之前添加上面的代码并没有解决问题.)

注意:以下是我的索引的示例:

CREATE NONCLUSTERED INDEX [ix_ClientFilerTo0]
ON [ClientTable] ([Client])
INCLUDE ([ClientCol1],[ClientCol2],[ClientCol3] ... Many more columns)
WHERE Client = 0


CREATE NONCLUSTERED INDEX [IX_Client_Status]
ON [OrderTable] ([Client],[Status])
INCLUDE ([OrderCol1],[OrderCol2],[OrderCol3],[OrderCol4])
WHERE [Status] <= 7
GO
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2012

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

修改MSBuild ItemGroup元数据

是否可以在声明后修改ItemGroup的元数据.

例如:

  <ItemGroup>
    <SolutionToBuild Include="$(BuildProjectFolderPath)\MySolution.sln">
      <Targets></Targets>
      <Properties></Properties>
    </SolutionToBuild>

  </ItemGroup>

  <Target Name="BuildNumberOverrideTarget">
     <!--Code to get the version number from a file (removed)-->

     <!--Begin Pseudo Code-->
     <CodeToChangeItemGroupMetaData 
           ItemToChange="%(SolutionToBuild.Properties)" 
           Condition ="'%(SolutionToBuild.Identity)' ==
                       '$(BuildProjectFolderPath)\MySolution.sln'"
           NewValue="Version=$(Version)" />
     <!--End Pseudo Code-->         

  </Target>
Run Code Online (Sandbox Code Playgroud)

我希望有一种方法不要求我删除该项目然后重新声明它.

谢谢你的回答.Vaccano

msbuild

21
推荐指数
3
解决办法
2万
查看次数

为"成功"检查null是否算作"双重使用变量"?

我已经读过一个变量永远不应该做多件事.重载变量以执行多个操作是不好的.

因此,我最终编写如下代码:(使用customerFound变量)

bool customerFound = false;
Customer foundCustomer = null;
if (currentCustomer.IsLoaded)
{
    if (customerIDToFind = currentCustomer.ID)
    {
        foundCustomer = currentCustomer;
        customerFound = true;
    }
}
else
{
    foreach (Customer customer in allCustomers)
    {
        if (customerIDToFind = customer.ID)
        {
            foundCustomer = customer;
            customerFound = true;
        }
    }
}
if (customerFound)
{
    // Do something
}     
Run Code Online (Sandbox Code Playgroud)

但在内心深处,我有时想写这样的代码:(没有customerFound变量)

Customer foundCustomer = null;
if (currentCustomer.IsLoaded)
{
    if (customerIDToFind = currentCustomer.ID)
    {
        foundCustomer = currentCustomer;
    }
}
else
{
    foreach …
Run Code Online (Sandbox Code Playgroud)

c#

21
推荐指数
4
解决办法
882
查看次数

使用Type变量声明变量

我有这个代码:

Type leftType = workItem[LeftFieldName].GetType();
Run Code Online (Sandbox Code Playgroud)

然后我想声明一个该类型的变量:

leftType someVar;
Run Code Online (Sandbox Code Playgroud)

那可能吗?

c# c#-4.0

21
推荐指数
2
解决办法
4万
查看次数