C# asp.net中的NullReferenceException测试数据集
我已经写了一个3层的网站,其中有用于访问数据库的单例存储库。我的存储库使用数据集连接到数据库并从中查询。 我想使用Visual Studio 2010测试项目测试该站点,但在存储库中创建dataset的TableAdapter时,测试应用程序中出现以下错误: System.NullReferenceException:对象引用未设置为实例 指一个物体 当我从站点内部使用存储库时,代码可以正常工作,但在测试应用程序中我遇到了这个错误。 我的一个存储库中出现了以下错误:C# asp.net中的NullReferenceException测试数据集,c#,asp.net,visual-studio-2010,unit-testing,C#,Asp.net,Visual Studio 2010,Unit Testing,我已经写了一个3层的网站,其中有用于访问数据库的单例存储库。我的存储库使用数据集连接到数据库并从中查询。 我想使用Visual Studio 2010测试项目测试该站点,但在存储库中创建dataset的TableAdapter时,测试应用程序中出现以下错误: System.NullReferenceException:对象引用未设置为实例 指一个物体 当我从站点内部使用存储库时,代码可以正常工作,但在测试应用程序中我遇到了这个错误。 我的一个存储库中出现了以下错误: public sealed
public sealed class VehicleRepository
{
private readonly int gateCode;
private readonly VehicleTableAdapter vehicleSet;
private readonly VehicleTypeTableAdapter vehicleTypeSet;
private static VehicleRepository instance;
private VehicleRepository()
{
var configureTable = new ConfigurationTableAdapter();
--->>> var configuration = configureTable.GetData().ToList();
if (configuration.Count == 0)
throw new UserInterfaceException("some message");
if (configuration.Count != 1)
throw new UserInterfaceException("some message");
gateCode = configuration[0].GateCode;
vehicleSet=new VehicleTableAdapter();
vehicleTypeSet=new VehicleTypeTableAdapter();
}
public static VehicleRepository GetInstance()
{
return instance ?? (instance = new VehicleRepository());
}
public Vehicle GetVehicleByPlaque(string plaque)
{
.....
}
private static Vehicle ConvertVehicleRowToVehicle(TransportCo.VehicleRow vehicleRow,TransportCo.VehicleTypeRow vehicleTypeRow)
{
....
}
public void SaveOrUpdate(Vehicle vehicle)
{
...
}
private static void UpdateVehicle(Vehicle vehicle)
{
...
}
}
我在-->>>行中找到了错误。
有人知道这个问题吗?我怀疑如果你把这行分成两个步骤,看看GetData返回的内容,你会发现它是空的。数据库和测试的一个常见问题是,连接字符串通常存储在网站的配置文件中。执行测试时,web.config通常不起作用。这很容易导致你描述的那种情况。因此,即使您知道它在生产环境中工作,它也没有说明连接是否在测试中正确设置ConfigurationTableAdapter.GetData返回什么?它是这样的:从ConfigurationSelect中选择*并且您确定返回了什么?是的,当我从default.aspx运行它时,代码工作正常,如果它返回IEnumerable,调用ToList可能会触发迭代器块内的异常。有趣的是,Oded。我没有考虑过这一点,但我想知道在测试运行时,这个调用背后是否有什么原因。我怀疑不是。当我从网站内部运行它时,这段代码会起作用。我将一些测试对象放在default.aspx中,然后运行代码,它就可以工作了。因此,configureTable.GetData不可用null@JGC-好的,是的-我知道它在网站上运行良好。但是,在您的测试中,configureTable.GetData是否返回非null的内容?@JGC抱歉,我很困惑。您是说它在测试中确实返回了非空值,还是说您认为它应该返回非空值。@JGC您要确保测试项目的配置文件中的连接字符串是正确的测试项目没有任何配置文件,因为它使用存储库类,而存储库位于网站项目中,并且它使用网站连接的web.config。@JGC您是如何验证这种情况的?您使用什么测试框架呢?我使用VisualStudio2010的默认测试框架,它使测试项目接近真实项目。我将测试代码放在Default.aspx中,并跟踪了代码,它运行良好,所以问题应该在测试中解决project@JGC在这种情况下,您确实需要为您的测试项目创建一个配置文件。将测试代码放在default.aspx中不会验证测试项目的配置是否正确。相反地如果测试代码在网站上下文中执行而不是在测试项目中执行,则排除了代码问题并指向配置问题。将applicationin配置文件添加到测试项目中,并向其中添加连接字符串