Да, вы можете издеваться над методами Б.
Самый простой способ сделать это, вероятно, передать экземпляр B в конструктор A при его создании.
Таким образом, в своих юнит-тестах вы можете просто создать макет B и вместо этого передать его. Как правило, вы можете легко смоделировать любой объект, который вы передаете или устанавливаете снаружи объекта. Таким образом, все, что передается в конструктор или устанавливается на свойство. Вероятно, можно смоделировать приватные переменные, хотя я не знаю достаточно о Moq, чтобы сказать наверняка, но это часто лучше сделать путем реструктуризации кода, чтобы вместо этого ему передавался зависимый объект.
Если B реализует интерфейс, IB, то вы бы сделали что-то вроде этого:
var mockB = new Mock<IB>();
mockB.Setup(x => x.SomeMethod()).Returns([whatever value you want to return]);
var a = new A(mockB.Object);
Примечание: этот код на C # и из памяти, поэтому может быть неправильным. Это скорее общая идея.
После этого вы можете вызывать свой метод для a, который будет использовать любое значение, которое вы указали в методе Returns в настройке, для выполнения своих вычислений.