我使用@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
public class ControllerTest {
@Before
public void setup()
{
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(controller).setControllerAdvice(new ControllerExceptionHandler())
.build();
}
@Test
public void testCase() throws Exception
{
mockMvc.perform(get("locale?limit=-1")).andExpect(status().isBadRequest());
}
进行表过滤。我有一个带有System.Data.DataView.RowFilter
数据类型的“时间”列,对于此列,我使用以下过滤器:
时间< = '15 .12.2015 11:38:03.000'
但是我意外地错误地输入了分隔秒和毫秒的点,而是输入了分号:
时间< = '15 .12.2015 11:38:03:000'。
我在表格中有一些数据,在第一种情况下,它应该按原样过滤,但第二种情况给出了空的结果。
但是当我试图在项目之外重新创建这个问题时,我发现,第二个案例引发异常!
代码:
DateTime
我已经多次检查并在我的项目中:
var dt = new DataTable();
var col = dt.Columns.Add("Time");
col.DataType = typeof(DateTime);
var row = dt.NewRow();
row["Time"] = DateTime.Parse("14.12.2015 11:38:03.000");
dt.Rows.Add(row);
dt.Rows.Count.Dump();
dt.DefaultView.RowFilter="Time<= '15.12.2015 11:38:03.000'"; // Ok.
dt.DefaultView.RowFilter="Time<= '15.12.2015 11:38:03:000'"; // Evaluation Exception.
。我认为可能是.Net 4.0错误并将测试应用程序的框架设置为它。 同样的结果:它抛出异常,但在项目中没有异常。
在测试应用中,即使没有调试,也会在发布版本中抛出异常,因此它不依赖于调试器设置。
我已经仔细检查过我在同一个库中使用相同的类。
我在同一台PC上运行我的项目和测试应用程序。
以下是"Time<= '15.12.2015 11:38:03:000'"
值设置为错误过滤器后的下一步调试屏幕截图,它接受它无例外:
如果未引发预期的异常,可能导致这种情况的原因是什么?
答案 0 :(得分:2)
我测试了你的代码,似乎没有测试过滤器,除非数据表中有一行 这段代码可以使用
var dt = new DataTable();
var col = dt.Columns.Add("Time");
col.DataType = typeof(DateTime);
//var row = dt.NewRow();
//row["Time"] = DateTime.Parse("14.12.2015 11:38:03.000");
//dt.Rows.Add(row);
dt.DefaultView.RowFilter = "Time<= '15.12.2015 11:38:03.000'";
dt.DefaultView.RowFilter = "Time<= '15.12.2015 11:38:03:000'";
但如果在设置过滤器后在数据表中添加一行,则会产生错误,表示您无法将时间与字符串进行比较
var row = dt.NewRow();
row["Time"] = DateTime.Parse("14.12.2015 11:38:03.000");
dt.Rows.Add(row); //this will generate an error
错误“无法执行&#39;&lt; =&#39;在System.DateTime和System.String上操作。“
所以当数据表为空时不执行过滤器
编辑: CodingFeles:为了测试过滤器,table应该在过滤器中使用的列中有一些值