我开始玩intellitest&单元测试,以了解它是如何工作的以及它最终看起来像什么。
所以我使用intellitest为我的一个类创建了测试,对于一个看起来像这样的方法:
public Advert Get(int advertId)
{
if (advertId > 0)
{
Advert advert = Manager.Instance.Advert.GetByid(advertId);
if (advert != null)
{
advert.ItemsWanted = advert.GetItemsWanted(advert.Id);
advert.UserItemsOffered = advert.GetUserItemsOffered(advert.Id);
}
return null;
}
return null;
}
调用提供查询的简单方法,并返回以下内容:
public T GetObject<T>(object obj, string query)
{
using (SqlConnection connection = GetConnection())
{
return connection.Query<T>(query, obj).FirstOrDefault();
}
}
现在我使用MSTest创建了一个intellitest,如下所示:
[TestClass]
[PexClass(typeof(Advert))]
[PexAllowedExceptionFromTypeUnderTest(typeof(ArgumentException), AcceptExceptionSubtypes = true)]
[PexAllowedExceptionFromTypeUnderTest(typeof(InvalidOperationException))]
public partial class AdvertTest
{
/// <summary>Test stub for Get(Int32)</summary>
[PexMethod]
public Advert GetTest([PexAssumeUnderTest]Advert target, int advertId)
{
Advert result = target.Get(advertId);
return result;
// TODO: add assertions to method AdvertTest.GetTest(Advert, Int32)
}
}
当我运行这个intellitest时,它在第二次使用adsId为1时失败。 奇怪的是,如果我运行单元测试,它会单独生成它通过正常,我调试,它看起来都很好。
失败测试的堆栈跟踪在dapper.net文件中失败,位于
Identity..ctor(String, Nullable``1<CommandType>,String Type, Type[], int32) in Dapper NET40\SqlMapper.cs(980)
仅供参考:GetConnection
是一种非静态方法,只返回我的连接字符串。