На самом деле, контекстное меню не дает вам, ваш 100% принятый ответ, вы можете остановить элемент контекстного меню, щелкнув правой кнопкой мыши. Вы показываете, что пользовательский код меню здесь, может быть, это поможет вам. ссылка: http://jsfiddle.net/6cqhsfvL/1/ или выше код
$('.title').on('click', function(){
$('.nav').slideDown();
});
$('.nav').on('click', function(){
$(this).slideUp();
});
$('.nav a').on("mousedown",function(e){
e.preventDefault();
if(event.which==3){
$('#item li a').attr('href', $(this).attr('href'));
}
});
$('.nav a').bind("contextmenu",function(e){
e.preventDefault();
$("#cntnr").css("left",e.pageX);
$("#cntnr").css("top",e.pageY);
$("#cntnr").fadeIn(200,startFocusOut());
});
$("#items").on('click', 'a', function(event) {
event.stopPropagation();
$('.nav').slideUp();
$("#cntnr").hide();
window.open($(this).attr('href'), '_blank' );
});
function startFocusOut(){
$(document).on("click",function(){
$("#cntnr").hide();
$(document).off("click");
});
}
.title{cursor:pointer;}
.nav{display:none;}
#items{
list-style:none;
margin:0px;
margin-top:4px;
padding-left:10px;
padding-right:10px;
padding-bottom:3px;
font-size:17px;
color: #333333;
}
#cntnr{
display:none;
position:fixed;
border:1px solid #B2B2B2;
width:150px; background:#F9F9F9;
box-shadow: 3px 3px 2px #E9E9E9;
border-radius:4px;
}
li{
padding: 3px;
padding-left:10px;
}
#items :hover{
color: white;
background:#284570;
border-radius:2px;
}
MENU
Не опрос, что Вы симулируете с этим, единственный способ протестировать и перечислить зарегистрированные события, состоит в том если Ваш регистрировать их в Вашем собственном наборе.
Посмотрите этот пример:
public class MyChangePersonService : IChangePersonService
{
private IList<EventHandler> handlers;
private EventHandler _personEvent;
public event EventHandler PersonCreated
{
add
{
_personEvent += value;
handlers.Add(value);
}
remove
{
_personEvent -= value;
handlers.Remove(value);
}
}
public IList<EventHandler> PersonEventHandlers { get { return handlers; } }
public MyChangePersonService()
{
handlers = new List<EventHandler>();
}
public void FirePersonEvent()
{
_personEvent(this, null);
}
}
Затем Вы могли получить доступ к зарегистрированным обработчикам с опорой PersonEventHandlers
.
Можно ли реализовать что-то вроде этого?
Это смотрит на меня как, Вы пытаетесь в замок модульного теста Windsor. Так как это, вероятно, уже имеет модульные тесты, я думаю, что это - трата усилия. Вы были бы более обеспеченным тестированием, что Ваш объект генерирует соответствующие события в корректные времена (вероятно, путем регистрации фиктивного объекта как обработчика событий).
Это не действительно поблочное тестирование, это - интеграционный тест. И я не тестирую замок Windsor, а скорее мою конфигурацию его. Я тестирую это, все мои отделенные классы поднимаются трубку, как я предназначаю.
В конечном счете я хочу протестировать ту свою конфигурацию, правильно поднимает трубку события, как я хочу, но я не уверен, что C# позволит мне, не изменяя мой API, как говорит Yuval.
Кажется, что Вы пытаетесь подталкивать некоторую информацию из своего объекта, чтобы утверждать, что это - одна вещь или другой. Обратите внимание, что это - не обязательно поблочное тестирование, потому что Вы не тестируете функциональность.
Если необходимо протестировать это, кажется, что необходимо будет открыть общедоступный API в IChangePersonService
для получения зарегистрированных обработчиков событий.