C# Visual Studio团队测试:如何进行单元测试”;只使用Asserts()且不使用任何工具的运算符
我需要编写一些单元测试用例来在C#Visual Studio团队测试框架中测试我的代码。下面是我要测试的方法:C# Visual Studio团队测试:如何进行单元测试”;只使用Asserts()且不使用任何工具的运算符,c#,.net,unit-testing,asp.net,visual-studio,C#,.net,Unit Testing,Asp.net,Visual Studio,我需要编写一些单元测试用例来在C#Visual Studio团队测试框架中测试我的代码。下面是我要测试的方法: public static Association CreateAssociationFromXrm(Xrm.pv_association xrmAssociation) { return new Association { AssociationId = xrmAssociation.pv_associationId.GetValueOrD
public static Association CreateAssociationFromXrm(Xrm.pv_association xrmAssociation)
{
return new Association
{
AssociationId = xrmAssociation.pv_associationId.GetValueOrDefault(),
Name = xrmAssociation.pv_Name,
BusinessId = xrmAssociation.pv_BusinessID,
ParcelId = xrmAssociation.pv_ParcelID,
AssociationHoldingId = (xrmAssociation.pv_AssociationHolding != null) ? xrmAssociation.pv_AssociationHolding.Id : Guid.Empty,
AssociationCategoryId = (xrmAssociation.pv_Category != null) ? xrmAssociation.pv_Category.Id : Guid.Empty,
EmailAddress = xrmAssociation.pv_PrimaryEmail,
Description = xrmAssociation.pv_Description,
IsDevelopementComplete = xrmAssociation.pv_IsDevelopmentComplete,
Fax = xrmAssociation.pv_Fax,
AlternateEmail = xrmAssociation.pv_AlternateEmail,
WorkPhone1 = xrmAssociation.pv_WorkPhone1,
WorkPhone2 = xrmAssociation.pv_WorkPhone2,
Website = xrmAssociation.pv_Website,
DevelopmentCount = xrmAssociation.pv_DevelopmentOwnedCount,
HomeDescription = xrmAssociation.pv_HomeDescription,
DateTurnedOver = xrmAssociation.pv_DateTurnedOver,
OwnersOccupiedCount = xrmAssociation.pv_OwnersOccupiedCount.HasValue ? xrmAssociation.pv_OwnersOccupiedCount.Value : 0,
RentalsOccupiedCount = xrmAssociation.pv_RentalsOccupiedCount.HasValue ? xrmAssociation.pv_RentalsOccupiedCount.Value : 0,
RentalCapCount = xrmAssociation.pv_RentalCapCount.HasValue ? xrmAssociation.pv_RentalCapCount.Value : 0,
HomeMaxCount = xrmAssociation.pv_HomeMaxCount.HasValue ? xrmAssociation.pv_HomeMaxCount.Value : 0,
Address1 = xrmAssociation.pv_Address1,
Address2 = xrmAssociation.pv_Address2,
State = xrmAssociation.pv_State,
City = xrmAssociation.pv_City,
Zip = xrmAssociation.pv_ZIP,
County = xrmAssociation.pv_County,
CommunityText = xrmAssociation.pv_CommunityText,
FederalCompanyClassificationId = xrmAssociation.pv_FederalCompanyClassificationID != null ? xrmAssociation.pv_FederalCompanyClassificationID.Id : Guid.Empty,
Domain = xrmAssociation.pv_Domain,
CreatedByUserProfileId = xrmAssociation.pv_CreatedByUserProfileID != null ? xrmAssociation.pv_CreatedByUserProfileID.Id : Guid.Empty,
ModifiedByUserProfileId = xrmAssociation.pv_ModifiedByUserProfileID != null ? xrmAssociation.pv_ModifiedByUserProfileID.Id : Guid.Empty
};
}
[TestMethod]
[ExpectedException(typeof(NullReferenceException))] // #1
public void CreateAssociationFromXrmShouldCheckConditionalBranch()
{
Xrm.pv_association Input = new Xrm.pv_association();
Input = null; // #2
PVWebApiRole.ApiModelFactory.CreateAssociationFromXrm(Input);
var expected = default(PVWebApi.Models.Association);
Assert.IsTrue(expected == PVWebApiRole.ApiModelFactory
.CreateAssociationFromXrm(Input), "Failed");
}
在上面的方法中,我需要编写单元测试用例来测试“if-else”逻辑语句。示例-“CreatedByUserProfileId=xrAssociation.pv\u CreatedByUserProfileId!=null?xrAssociation.pv\u CreatedByUserProfileId.Id:Guid.Empty”
因此我编写了以下单元测试方法:
namespace PVWebApi.Test
{
[TestClass]
public class ApiModelFactoryTest
{
[TestMethod]
[ExpectedException(typeof(NullReferenceException), "A userId of null was inappropriately allowed.")]
public void CreateAssociationFromXrmShouldCheckConditionalBranch()
{
Xrm.pv_association Input = new Xrm.pv_association();
Input = null;
PVWebApiRole.ApiModelFactory.CreateAssociationFromXrm(Input);
var expected = default(PVWebApi.Models.Association);
Assert.IsTrue(expected == PVWebApiRole.ApiModelFactory.CreateAssociationFromXrm(Input), "Failed");
}
}
}
这个测试通过了,但它实际上并没有测试我想要测试的东西,即当通过“null”时,它应该分配“Guid.Empty”。它只是抛出NullReference的异常,因此测试通过。您将整个
Xrm.pv\u关联
对象作为null传递,而不仅仅是userId
。您正在测试的方法将在第一行抛出异常:
AssociationId = xrmAssociation.pv_associationId.GetValueOrDefault(), //xrmAssociation is null!
也许您打算在测试方法中这样做:
Input.pv_CreatedByUserProfileID = null;
您的测试肯定不会测试您想要测试的内容:
public static Association CreateAssociationFromXrm(Xrm.pv_association xrmAssociation)
{
return new Association
{
AssociationId = xrmAssociation.pv_associationId.GetValueOrDefault(),
Name = xrmAssociation.pv_Name,
BusinessId = xrmAssociation.pv_BusinessID,
ParcelId = xrmAssociation.pv_ParcelID,
AssociationHoldingId = (xrmAssociation.pv_AssociationHolding != null) ? xrmAssociation.pv_AssociationHolding.Id : Guid.Empty,
AssociationCategoryId = (xrmAssociation.pv_Category != null) ? xrmAssociation.pv_Category.Id : Guid.Empty,
EmailAddress = xrmAssociation.pv_PrimaryEmail,
Description = xrmAssociation.pv_Description,
IsDevelopementComplete = xrmAssociation.pv_IsDevelopmentComplete,
Fax = xrmAssociation.pv_Fax,
AlternateEmail = xrmAssociation.pv_AlternateEmail,
WorkPhone1 = xrmAssociation.pv_WorkPhone1,
WorkPhone2 = xrmAssociation.pv_WorkPhone2,
Website = xrmAssociation.pv_Website,
DevelopmentCount = xrmAssociation.pv_DevelopmentOwnedCount,
HomeDescription = xrmAssociation.pv_HomeDescription,
DateTurnedOver = xrmAssociation.pv_DateTurnedOver,
OwnersOccupiedCount = xrmAssociation.pv_OwnersOccupiedCount.HasValue ? xrmAssociation.pv_OwnersOccupiedCount.Value : 0,
RentalsOccupiedCount = xrmAssociation.pv_RentalsOccupiedCount.HasValue ? xrmAssociation.pv_RentalsOccupiedCount.Value : 0,
RentalCapCount = xrmAssociation.pv_RentalCapCount.HasValue ? xrmAssociation.pv_RentalCapCount.Value : 0,
HomeMaxCount = xrmAssociation.pv_HomeMaxCount.HasValue ? xrmAssociation.pv_HomeMaxCount.Value : 0,
Address1 = xrmAssociation.pv_Address1,
Address2 = xrmAssociation.pv_Address2,
State = xrmAssociation.pv_State,
City = xrmAssociation.pv_City,
Zip = xrmAssociation.pv_ZIP,
County = xrmAssociation.pv_County,
CommunityText = xrmAssociation.pv_CommunityText,
FederalCompanyClassificationId = xrmAssociation.pv_FederalCompanyClassificationID != null ? xrmAssociation.pv_FederalCompanyClassificationID.Id : Guid.Empty,
Domain = xrmAssociation.pv_Domain,
CreatedByUserProfileId = xrmAssociation.pv_CreatedByUserProfileID != null ? xrmAssociation.pv_CreatedByUserProfileID.Id : Guid.Empty,
ModifiedByUserProfileId = xrmAssociation.pv_ModifiedByUserProfileID != null ? xrmAssociation.pv_ModifiedByUserProfileID.Id : Guid.Empty
};
}
[TestMethod]
[ExpectedException(typeof(NullReferenceException))] // #1
public void CreateAssociationFromXrmShouldCheckConditionalBranch()
{
Xrm.pv_association Input = new Xrm.pv_association();
Input = null; // #2
PVWebApiRole.ApiModelFactory.CreateAssociationFromXrm(Input);
var expected = default(PVWebApi.Models.Association);
Assert.IsTrue(expected == PVWebApiRole.ApiModelFactory
.CreateAssociationFromXrm(Input), "Failed");
}
@1) 如果不是你想要的,为什么你要告诉测试跑步者你期望NRE
@2) 如果将值设置为null
,它应该如何“创建任何内容”
也许你想要这样的东西:
[TestMethod]
public void CreateAssociationFromXrmShouldCheckConditionalBranch()
{
Xrm.pv_association Input = new Xrm.pv_association();
var output = PVWebApiRole.ApiModelFactory.CreateAssociationFromXrm(Input);
Assert.AreEqual(Guid.Empty, output.CreatedByUserProfileId);
}
有些人可能会认为被要求立即在志愿者驱动的平台上做出反应是非常无礼的。如果你赶时间,有可能你应该重新考虑让你到达那里的事件顺序。非常感谢,这是我试图检查的内容,但无法以正确的方式书写。