Xin chào Tất cả tôi có câu hỏi liên quan đến NUnit Extension (2.5.10). Điều tôi đang cố gắng thực hiện là viết một số thông tin thử nghiệm bổ sung vào cơ sở dữ liệu . Tôi đã tạo phần mở rộng NUnit bằng cách sử dụng Event Listeners. Vấn đề tôi đang gặp phải là công khai void phương pháp TestFinished (TestResult result) đang được gọi hai lần tại thời gian chạy là . Và mã của tôi mà viết vào cơ sở dữ liệu là trong phương pháp này và lá tôi với các mục trùng lặp trong cơ sở dữ liệu. Câu hỏi là: Đó có phải là hành vi mong đợi không? Tôi có thể làm điều gì đó về số không? Mã mở rộng bên dưới. Cảm ơn.Mở rộng NUnit
using System;
using NUnit.Core;
using NUnit.Core.Extensibility;
namespace NuinitExtension
{
[NUnitAddinAttribute(Type = ExtensionType.Core,
Name = "Database Addin",
Description = "Writes test results to the database.")]
public class MyNunitExtension : IAddin, EventListener
{
public bool Install(IExtensionHost host)
{
IExtensionPoint listeners = host.GetExtensionPoint("EventListeners");
if (listeners == null)
return false;
listeners.Install(this);
return true;
}
public void RunStarted(string name, int testCount){}
public void RunFinished(TestResult result){}
public void RunFinished(Exception exception){}
public void TestStarted(TestName testName){}
public void TestFinished(TestResult result)
{
// this is just sample data
SqlHelper.SqlConnectAndWRiteToDatabase("test", test",
2.0, DateTime.Now);
}
public void SuiteStarted(TestName testName){}
public void SuiteFinished(TestResult result){}
public void UnhandledException(Exception exception){}
public void TestOutput(TestOutput testOutput){}
}
}
tôi nghĩ rằng 'TestFinished' sẽ được gọi ít nhất một lần cho mỗi bài kiểm tra. Bạn chỉ đang chạy một thử nghiệm duy nhất? Nếu bạn là sau đó nó có thể là 'TestFinished' được gọi là một lần cho các vật cố định và một lần cho phương pháp thử nghiệm. Tôi đã không nhìn vào bên trong mã NUnit trong một thời gian dài vì vậy tôi không chắc chắn 100%. Bạn có thể biết bằng cách kiểm tra các thuộc tính trên 'TestResult' được truyền vào. –
Cảm ơn Mike, tôi đang chạy nhiều kiểm tra và tôi muốn ghi lại mọi thử nghiệm, nhưng chỉ một lần, thay vào đó tôi nhận được hai mục cho mỗi bài kiểm tra. Và tôi nghĩ rằng phương pháp đặc biệt này sẽ chỉ chạy cho mỗi thử nghiệm một lần và SuiteStarted sẽ chạy cho mỗi TestFixture. – Igor
Các suite khác nhau. Có một cách rõ ràng để thiết lập một Suite. Tôi không bao giờ sử dụng nó vì vậy tôi không chắc chắn như thế nào nữa. 'TestResult' theo sau mẫu Composite. Vì vậy, nó có thể là kết quả của một thử nghiệm hoặc một trận đấu hoặc chạy thử nghiệm toàn bộ. Tôi ngạc nhiên rằng nó được gọi hai lần cho một thử nghiệm duy nhất. Có thể nó đã được cài đặt hai lần? –